Ответ 1
Вы не можете передать вызов функции в качестве аргумента в свою хранимую процедуру. Вместо этого используйте промежуточную переменную:
DECLARE @tmp DATETIME
SET @tmp = GETDATE()
EXEC DisplayDate @tmp;
Может быть, у меня есть момент "дня", но кто-нибудь может объяснить, почему я получаю
Сообщение 102, Уровень 15, Состояние 1, Строка 2
Неверный синтаксис рядом с ')'.
При беге
CREATE PROC DisplayDate
(@DateVar DATETIME)
AS
BEGIN
SELECT @DateVar
END
GO
EXEC DisplayDate GETDATE();
Вы не можете передать вызов функции в качестве аргумента в свою хранимую процедуру. Вместо этого используйте промежуточную переменную:
DECLARE @tmp DATETIME
SET @tmp = GETDATE()
EXEC DisplayDate @tmp;
В качестве 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'