146

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

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

跑步时

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

EXEC DisplayDate GETDATE();
4

3 回答 3

190

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

DECLARE @tmp DATETIME
SET @tmp = GETDATE()

EXEC DisplayDate @tmp;
于 2010-03-08T03:25:08.117 回答
21

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

于 2013-07-23T12:27:42.580 回答
0

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

`声明@ddate 日期

设置日期 = 获取日期()

执行显示日期@ddate;`

于 2021-05-26T08:08:23.417 回答