Sintassi non corretta vicino a ")" durante la chiamata alla stored procedure con GETDATE


121

Forse sto avendo un momento di "pomeriggio", ma qualcuno può spiegare perché ottengo

Msg 102, livello 15, stato 1, riga 2
Sintassi non corretta vicino a ")".

Quando corri

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

EXEC DisplayDate GETDATE();

Risposte:


170

Non è possibile passare una chiamata di funzione come argomento alla procedura memorizzata. Utilizza invece una variabile intermedia:

DECLARE @tmp DATETIME
SET @tmp = GETDATE()

EXEC DisplayDate @tmp;

22
C'è una ragione per questa restrizione?
Zameer

@student C'è una ragione per le restrizioni di base come la mancanza di tipi di colonna booleani e interi o la mancanza di chiavi filtrate in Oracle ...?
Skipper

20

Come ha detto Mitch Wheat, non puoi passare una funzione.

Se nel tuo caso devi passare un valore precalcolato o GETDATE (), puoi usare il valore predefinito. Ad esempio, modifica la procedura memorizzata:

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

    --the SP stuff here
    SELECT @DateVar
END
GO

E poi prova:

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

Nota : qui suppongo che il valore NULL non sia 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"

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.