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();

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;

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'

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.