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

Nat*_*Nat 113 t-sql sql-server getdate

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

消息102,级别15,状态1,行2
'''附近的语法不正确.

跑步时

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

EXEC DisplayDate GETDATE();
Run Code Online (Sandbox Code Playgroud)

Mit*_*eat 160

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

DECLARE @tmp DATETIME
SET @tmp = GETDATE()

EXEC DisplayDate @tmp;
Run Code Online (Sandbox Code Playgroud)

  • 有这个限制的原因吗? (21认同)

Ale*_*der 20

正如Mitch Wheat所说,你不能通过一项功能.

如果在您的情况下您应该传入预先计算的值或GETDATE() - 您可以使用默认值.例如,修改存储过程:

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

    --the SP stuff here
    SELECT @DateVar
END
GO
Run Code Online (Sandbox Code Playgroud)

然后尝试:

EXEC DisplayDate '2013-02-01 00:00:00.000'
EXEC DisplayDate
Run Code Online (Sandbox Code Playgroud)

备注:这里我认为该值没有使用NULL值.如果不是您的情况 - 您可以使用其他未使用的值,例如'1900-01-01 00:00:00.000'