我需要使用存储过程作为函数进行选择-它必须是存储过程,因为它会修改数据,而函数不能这样做。
所以正常情况下,我的功能是这样执行的
DECLARE @RC int
DECLARE @NextVal int
EXECUTE @RC = dbo.NextPickListNo
@NextVal OUTPUT
但我需要它用这样的东西:
select orderID, dbo.NextPickListNo -- this does not work
from blah where blah
换句话说,就像一个函数。
我是在另一个存储过程中完成这项工作的,所以如果需要的话,我可以使用游标——对于这么小的、本应在标准T-SQL中可用的东西来说,这似乎是一件很麻烦的事情。
如果你真的需要有副作用的函数,CLR就是你的选择。
CREATE ASSEMBLY [MyCLRLibrary]
FROM '\PathToMyCompiledCLR'
WITH PERMISSION_SET = SAFE
GO
CREATE FUNCTION [dbo].[NextPickListNo]
RETURNS int WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [MyCLRLibrary].[MyClass].[NextPickListNo]
GO