Неверный синтаксис рядом с ')', вызывающий хранимую процедуру с помощью GETDATE

Может быть, у меня есть момент "дня", но кто-нибудь может объяснить, почему я получаю

Сообщение 102, Уровень 15, Состояние 1, Строка 2
Неверный синтаксис рядом с ')'.

При беге

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

EXEC DisplayDate GETDATE();

Ответ 1

Вы не можете передать вызов функции в качестве аргумента в свою хранимую процедуру. Вместо этого используйте промежуточную переменную:

DECLARE @tmp DATETIME
SET @tmp = GETDATE()

EXEC DisplayDate @tmp;

Ответ 2

В качестве Mitch Wheat упоминается, что вы не можете передать функцию.

Если в вашем случае вы должны пройти предварительно рассчитанное значение или GETDATE() - вы можете использовать значение по умолчанию. Например, измените хранимую процедуру:

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

    --the SP stuff here
    SELECT @DateVar
END
GO

И затем попробуйте:

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

Примечание: здесь я предположил, что значение NULL не используется для этого параметра. Если это не ваш случай - вы можете использовать другое неиспользованное значение, например '1900-01-01 00: 00: 00.000'