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


120

也许我有一个“下午”的时刻,但是谁能解释我为什么得到

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

跑步时

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

EXEC DisplayDate GETDATE();

Answers:


169

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

DECLARE @tmp DATETIME
SET @tmp = GETDATE()

EXEC DisplayDate @tmp;

22
有此限制的原因吗?
Zameer '16

@student是否有一些基本限制的原因,例如缺少布尔和整数列类型或缺少Oracle中的筛选键...?
船长

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

然后尝试:

EXEC DisplayDate '2013-02-01 00:00:00.000'
EXEC DisplayDate

备注:在这里我假定此参数未使用NULL值。如果不是您的情况-您可以使用另一个未使用的值,例如'1900-01-01 00:00:00.000'

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.