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

时间:2010-03-08 03:21:45

标签: sql-server tsql getdate

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

  

Msg 102,Level 15,State 1,Line 2
  ')'附近的语法不正确。

运行时

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

EXEC DisplayDate GETDATE();

3 个答案:

答案 0 :(得分:148)

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

DECLARE @tmp DATETIME
SET @tmp = GETDATE()

EXEC DisplayDate @tmp;

答案 1 :(得分:19)

正如 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'

答案 2 :(得分:0)

我找到的解决方案是在执行之前声明临时变量并将它们传递到执行行中,例如

`声明@ddate 日期

set ddate = getdate()

EXEC DisplayDate @ddate;`