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();
Nat
la source

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;
Blé Mitch
la source
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'

Alexandre
la source