web-dev-qa-db-fra.com

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

J'ai peut-être un moment d '"après-midi", mais quelqu'un peut-il expliquer pourquoi je reçois

Msg 102, Niveau 15, Etat 1, Ligne 2
Syntaxe incorrecte près de ')'.

Lors de l'exécution

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

EXEC DisplayDate GETDATE();
108
Nat

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;
154
Mitch Wheat

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

Si, dans votre cas, vous devez transmettre 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 non utilisée, par exemple '1900-01-01 00: 00: 00.000'

20
Alexander