Syntaxe incorrecte près de ')' appelant une procédure stockée avec GETDATE


121

Peut-être que je passe un moment d'après-midi, mais quelqu'un peut-il expliquer pourquoi je reçois

Msg 102, niveau 15, état 1, ligne 2
Syntaxe incorrecte près de ')'.

En courant

CREATE PROC DisplayDate 
    (@DateVar DATETIME) 
AS 
BEGIN
    SELECT @DateVar
END
GO

EXEC DisplayDate GETDATE();

Réponses:


170

Vous ne pouvez pas transmettre un appel de fonction en tant qu'argument à votre procédure stockée. Utilisez plutôt une variable intermédiaire:

DECLARE @tmp DATETIME
SET @tmp = GETDATE()

EXEC DisplayDate @tmp;

22
Y a-t-il une raison à cette restriction?
Zameer

@student Y a-t-il une raison pour les restrictions de base comme le manque de types de colonnes booléennes et entières ou le manque de clés filtrées dans Oracle ...?
Skipper

20

Comme Mitch Wheat l'a mentionné, vous ne pouvez pas passer une fonction.

Si dans votre cas vous devez passer une valeur précalculée ou GETDATE () - vous pouvez utiliser la valeur par défaut. Par exemple, modifiez votre procédure stockée:

ALTER PROC DisplayDate 
(
    @DateVar DATETIME = NULL
) AS 
BEGIN
    set @DateVar=ISNULL(@DateVar,GETDATE())

    --the SP stuff here
    SELECT @DateVar
END
GO

Et puis essayez:

EXEC DisplayDate '2013-02-01 00:00:00.000'
EXEC DisplayDate

Remarque : Ici, j'ai supposé que la valeur NULL n'est pas utilisée pour ce paramètre. Si ce n'est pas votre cas, vous pouvez utiliser une autre valeur inutilisée, par exemple '1900-01-01 00: 00: 00.000'

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.