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

121

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

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

При беге

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

EXEC DisplayDate GETDATE();
натуральный
источник

Ответы:

170

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

DECLARE @tmp DATETIME
SET @tmp = GETDATE()

EXEC DisplayDate @tmp;
Митч Уит
источник
22
Есть ли причина для этого ограничения?
Zameer
@student Есть ли причина для основных ограничений, таких как отсутствие логических и целочисленных типов столбцов или отсутствие фильтрованных ключей в Oracle ...?
Skipper
20

Как упомянул Митч Уит, вы не можете передать функцию.

Если в вашем случае вы должны передать предварительно вычисленное значение или 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'.

Александр
источник