在执行存储过程时使用函数作为参数?
我测试的存储过程,并希望提交 'GETDATE()' 函数中位置参数的:在执行存储过程时使用函数作为参数?
DECLARE @return_value int
EXEC @return_value = my_store procedure
@MyId = 1,
@MyDateField = GETDATE()
SELECT 'Return Value' = @return_value
GO
SQL Server 2005的抱怨与以下错误:
Incorrect syntax near ')'.
有人关心棚关于此事的一些启示?
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可以要么指定一个值,要么指定一个vari能够或指定默认值。所以你必须将变量的值设置为GetDate()(正如其他人指定的那样)并使用该变量。
HTH
函数调用的参数不允许(除前缀@@
这些系统的功能 - 即那些曾经被称为全局变量)
您需要分配给一个变量。
微软承认这是小于大在这个相关连接项目:T-SQL: use scalar functions as stored procedure parameters
Agreed! More generally, wherever TSQL expects, say, and integer value, it should accept a literal, a variable, or the result of a function whose return type is integer. It just makes the language more regular ("orthogonal") and easier to learn/use.
That said, it's too late for this feature in the Katmai release, but I'll add it to our TODO list.
不能直接使用函数作为存储过程的参数。
你可以做到以下几点:
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
为什么你需要在GETDATE通过()。只需在被调用的存储过程中使用它即可。
您无法直接将其传入。只要将它分配给一个变量,并传递
DECLARE @dt as datetime
SET @dt=GETDATE()
EXEC @return_value = my_store procedure
@MyId = 1,
@MyDateField = dt
你可以使用
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
谢谢Raja,这很有帮助,我必须学习阅读发布的定义。 – krul 2011-05-11 16:33:31