2

另一位开发人员创建了一个存储过程,该过程设置为每个月作为 sql 作业运行。它需要一个日期时间参数。当我尝试在作业中或仅在查询窗口中调用它时,我得到一个错误Incorrect syntax near ')'。执行它的调用是:

exec CreateHeardOfUsRecord getdate()

当我给它一个硬编码的日期时,exec CreateHeardOfUsRecord '4/1/2010'它可以正常工作。知道为什么我不能getdate()在这种情况下使用吗?谢谢。

4

4 回答 4

3

Exec 传递的参数必须是常量或变量。GetDate() 被归类为函数。您需要声明一个变量来保存 GetDate() 的结果,然后将其传递给存储过程。

提供的值必须是常量或变量;您不能将函数名称指定为参数值。变量可以是用户定义的或系统变量,例如@@spid。

于 2010-04-23T17:15:34.447 回答
1

通过查看EXECUTE (Transact-SQL)

[ { EXEC | EXECUTE } ]
    { 
      [ @return_status = ]
      { module_name [ ;number ] | @module_name_var } 
        [ [ @parameter = ] { value 
                           | @variable [ OUTPUT ] 
                           | [ DEFAULT ] 
                           }

您只能传入常量值或变量或 DEFAULT 子句

试试看:

create procedure xy_t
@p datetime
as
select @p
go

exec xy_t GETDATE()

输出:

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near ')'.
于 2010-04-23T17:16:24.740 回答
0

尝试通过 Convert(varchar, GetDate(), 101)

于 2010-04-23T17:18:51.813 回答
0

在这里使用 Km 的代码是一种方法

create procedure xy_t 
@p datetime 
as 
select @p 
go 

declare @date datetime

set @date = getdate() 

exec xy_t @date 
于 2010-04-23T17:23:35.613 回答