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.