Sql server 在执行存储过程时使用函数作为参数?
我正在测试一个存储过程,希望提交'GETDATE()'函数来代替参数:Sql server 在执行存储过程时使用函数作为参数?,sql-server,sql-server-2005,tsql,stored-procedures,Sql Server,Sql Server 2005,Tsql,Stored Procedures,我正在测试一个存储过程,希望提交'GETDATE()'函数来代替参数: DECLARE @return_value int EXEC @return_value = my_stored_procedure @MyId = 1, @MyDateField = GETDATE() SELECT 'Return Value' = @return_value GO SQL Server 2005投诉出现以下错误: “')附近的语法不正确 有人想解释一下这个问题吗?
DECLARE @return_value int
EXEC @return_value = my_stored_procedure
@MyId = 1,
@MyDateField = GETDATE()
SELECT 'Return Value' = @return_value
GO
SQL Server 2005投诉出现以下错误:
“')附近的语法不正确
有人想解释一下这个问题吗?不允许将函数调用作为参数(前缀为
@
的系统函数除外,即那些以前被称为全局变量的函数)
您需要分配给一个变量
Microsoft承认,在这个相关的连接项目中,这不是很好:
同意!更一般地说,只要TSQL
期望,比如说,和整数值,它
应该接受一个文本,一个变量,
或者一个函数的结果
返回类型为整数。这只会让你
语言更加规范
(“正交”)并且更容易
学习/使用
话虽如此,但为时已晚
Katmai版本中的功能,但是
我会把它添加到我们的待办事项列表中
不能将函数直接用作存储过程参数 您可以执行以下操作:
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
尝试:
DECLARE @return_value int
EXEC @return_value = my_store procedure
@MyId = 1,
@MyDateField = (SELECT GETDATE())
SELECT 'Return Value' = @return_value
GO
你可以用
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
每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我知道我可以创建变量,但我对这个构造很好奇。@krul-您使用的短语“阐明了这一问题”是模棱两可的。如果你想问为什么会有这种限制,你应该问清楚。@Oded:我不确定krul是否在乎,但我想知道。这项限制为何存在?在我所知道的几乎所有其他语言中,都可以使用函数调用作为参数,并且它以预期的方式工作(对函数求值,将返回值作为参数传递)。为什么SQL不允许这样做?@TimGoodman-我没有理由支持你,这是只有微软才能回答的问题。据猜测,我认为优化器没有足够的关于不同函数性能的统计数据(不要忘记您可以创建用户定义的函数),因此无法做出正确的决策。有可能设计决策只是简单地不允许它们(顺便说一句,这都是猜测)。谢谢Raja,这很有帮助,我必须学习阅读发布的定义。不起作用(有永远有用的消息:语法错误)