使用 GETDATE 调用存储过程“)”附近的语法不正确

也许我有一个时刻的’下午’,但有人可以解释为什么我得到

味精102,15层,状态1,线路2
靠近’)’的语法不正确。

跑步的时候

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


EXEC DisplayDate GETDATE();
95083 次浏览

不能将函数调用作为参数传递给存储过程,而应使用中间变量:

DECLARE @tmp DATETIME
SET @tmp = GETDATE()


EXEC DisplayDate @tmp;

正如 米奇 · 维特提到的,不能传递函数。

如果在您的情况下,您应该传递一个预计算值或 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-0100.00.00.000’

我发现的解决方案是在执行前声明临时变量,并将这些变量传递到执行行中。

‘ Declare@ddate

设置 ddate = getdate ()

EXEC DisplayDate@ddate;’