2010-03-08 9 views
75

Forse sto avendo un momento di 'pomeriggio', ma chiunque può spiegare perché hoIncorrect syntax near ')' chiama storedproc con GETDATE

Msg 102, livello 15, stato 1, riga 2 non corretta sintassi vicino a ')'.

Quando si esegue

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

GO 

EXEC DisplayDate GETDATE(); 

risposta

107

Non è possibile passare in una chiamata di funzione come argomento per la stored procedure. Invece di utilizzare una variabile intermedia:

DECLARE @tmp DATETIME 
SET @tmp = GETDATE() 

EXEC DisplayDate @tmp; 
+6

C'è una ragione per questa restrizione? – xameeramir

14

Come Mitch grano citato non è possibile passare una funzione.

Se nel tuo caso dovresti passare un valore precalcolato o GETDATE() - puoi usare il valore predefinito. Ad esempio, modificare la stored procedure:

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

    --the SP stuff here 
    SELECT @DateVar 
END 
GO 

E quindi provare:

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

Nota: Qui ho supposto che il valore NULL non è in uso per questo parametro. Se non è il tuo caso, puoi utilizzare un altro valore non utilizzato, ad esempio "1900-01-01 00: 00: 00.000"