另一位开发人员创建了一个存储过程,该过程设置为每月作为sql作业运行。它需要一个datetime参数。当我尝试在作业或仅在查询窗口中调用它时,我收到错误Incorrect syntax near ')'
。执行它的调用是:
exec CreateHeardOfUsRecord getdate()
当我给它一个类似exec CreateHeardOfUsRecord '4/1/2010'
的硬编码日期时,它运行正常。知道为什么我不能在这种情况下使用getdate()
吗?感谢。
答案 0 :(得分:3)
使用Exec must either be constants or variables传递的参数。 GetDate()被归类为函数。您需要声明一个变量来保存GetDate()的结果,然后将其传递给存储过程。
提供的值必须是常量 或变量;你不能指定一个 函数名称作为参数值。 变量可以是用户定义的 系统变量,如@@ spid。
答案 1 :(得分:1)
[ { 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 ')'.
答案 2 :(得分:0)
尝试传递Convert(varchar,GetDate(),101)
答案 3 :(得分:0)
在这里使用Km的代码是一种方法
create procedure xy_t
@p datetime
as
select @p
go
declare @date datetime
set @date = getdate()
exec xy_t @date