也许我有一个“下午”的时刻,但谁能解释我为什么会得到
消息 102,级别 15,状态 1,第 2 行
')' 附近的语法不正确。
跑步时
CREATE PROC DisplayDate
(@DateVar DATETIME)
AS
BEGIN
SELECT @DateVar
END
GO
EXEC DisplayDate GETDATE();
也许我有一个“下午”的时刻,但谁能解释我为什么会得到
消息 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'
我找到的解决方案是在执行之前声明临时变量并将它们传递到执行行,例如
`声明@ddate 日期
设置日期 = 获取日期()
执行显示日期@ddate;`