这个问题已经在这里有一个答案:
- 不正确的语法附近“)”调用存储过程与GETDATE 2回答
我测试的存储过程,并希望提交“GETDATE()”函数来代替参数:
DECLARE @return_value int
EXEC @return_value = my_stored_procedure
@MyId = 1,
@MyDateField = GETDATE()
SELECT 'Return Value' = @return_value
GO
SQL Server 2005中有以下错误抱怨:
不正确的语法附近“)”。
有人关心摆脱对此事的一些轻?
每MSDN
Execute a stored procedure or function
[ { EXEC | EXECUTE } ]
{
[ @return_status = ]
{ module_name [ ;number ] | @module_name_var }
[ [ @parameter = ] { value
| @variable [ OUTPUT ]
| [ DEFAULT ]
}
]
[ ,...n ]
[ WITH RECOMPILE ]
}
[;]
Execute a character string
{ EXEC | EXECUTE }
( { @string_variable | [ N ]'tsql_string' } [ + ...n ] )
[ AS { LOGIN | USER } = ' name ' ]
[;]
Execute a pass-through command against a linked server
{ EXEC | EXECUTE }
( { @string_variable | [ N ] 'command_string [ ? ]' } [ + ...n ]
[ { , { value | @variable [ OUTPUT ] } } [ ...n ] ]
)
[ AS { LOGIN | USER } = ' name ' ]
[ AT linked_server_name ]
[;]
通告@parameter您可以指定一个值或一个变量或指定默认值。 所以,你一定要设置一个变量为GETDATE()(如其他人指定)的值,并使用该变量。
HTH
你不能直接使用函数作为存储过程的参数。
你可以做到以下几点:
DECLARE @now DateTime
SET @now = GETDATE()
DECLARE @return_value int
EXEC @return_value = my_stored_procedure
@MyId = 1,
@MyDateField = @now
SELECT 'Return Value' = @return_value
GO
函数调用的参数不允许(除了那些前缀系统功能@@
-即那些曾经被称为全局变量)
您需要分配给一个变量。
微软承认这是小于这个连接相关大项目: T-SQL:使用标量函数作为存储过程的参数
同意! 更一般地,无论TSQL预计,再说了,整数值,它应该接受一个文字,一个变量,或者其返回类型为整数的函数的结果。 它只是使语言更经常(“正交”),并更容易学习/使用。
这就是说,它是在卡特迈发布此功能为时已晚,但我把它添加到我们的TODO列表。
你可以使用
DECLARE @test DATE;
SET @test = GETDATE();
然后
DECLARE @return_value int
EXEC @return_value = my_store procedure
@MyId = 1,
@MyDateField = @test
SELECT 'Return Value' = @return_value
GO
尝试:
DECLARE @return_value int
EXEC @return_value = my_store procedure
@MyId = 1,
@MyDateField = (SELECT GETDATE())
SELECT 'Return Value' = @return_value
GO
为什么你需要在GETDATE通过()。 只需在调用的存储过程中使用它。
你不能直接传递进去。 只要将它分配给一个变量,并传递
DECLARE @dt as datetime
SET @dt=GETDATE()
EXEC @return_value = my_store procedure
@MyId = 1,
@MyDateField = dt
文章来源: Using function as a parameter when executing a stored procedure? [duplicate]