【问题标题】:Incorrect syntax near ')' calling stored procedure with GETDATE')' 附近的语法不正确,使用 GETDATE 调用存储过程
【发布时间】:2011-01-24 20:10:38
【问题描述】:

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

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

运行时

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

EXEC DisplayDate GETDATE();

【问题讨论】:

    标签: sql-server tsql getdate


    【解决方案1】:

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

    DECLARE @tmp DATETIME
    SET @tmp = GETDATE()
    
    EXEC DisplayDate @tmp;
    

    【讨论】:

    • 这种限制有什么原因吗?
    • @student 是否存在基本限制的原因,例如缺少布尔和整数列类型或 Oracle 中缺少过滤键...?
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      `声明@ddate 日期

      设置日期 = 获取日期()

      执行显示日期@ddate;`

      【讨论】:

        猜你喜欢
        • 2014-05-27
        • 2020-06-23
        • 2010-09-21
        • 1970-01-01
        • 2020-07-05
        • 2020-05-23
        • 2021-10-25
        • 1970-01-01
        • 2015-06-12
        相关资源
        最近更新 更多