Sintaxe incorreta perto de ')' chamando procedimento armazenado com GETDATE

120

Talvez eu esteja tendo um momento de 'tarde', mas alguém pode explicar por que eu recebo

Msg 102, Nível 15, Estado 1, Linha 2
Sintaxe incorreta próxima a ')'.

Ao executar

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

EXEC DisplayDate GETDATE();
Nat
fonte

Respostas:

169

Você não pode passar uma chamada de função como argumento para seu procedimento armazenado. Em vez disso, use uma variável intermediária:

DECLARE @tmp DATETIME
SET @tmp = GETDATE()

EXEC DisplayDate @tmp;
Mitch Wheat
fonte
22
Existe uma razão para esta restrição?
Zameer
@student Existe um motivo para restrições básicas, como falta de tipos de colunas booleanas e inteiras ou falta de chaves filtradas no Oracle ...?
Skipper
20

Como Mitch Wheat mencionou, você não pode passar uma função.

Se, no seu caso, você deve passar um valor pré-calculado ou GETDATE () - você pode usar o valor padrão. Por exemplo, modifique seu procedimento armazenado:

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

    --the SP stuff here
    SELECT @DateVar
END
GO

E então tente:

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

Observação : aqui eu supunha que o valor NULL não está sendo usado para esse parâmetro. Se não for o seu caso - você pode usar outro valor não utilizado, por exemplo '1900-01-01 00: 00: 00.000'

Alexander
fonte