我需要此功能:
create function test (@InVar int)
returns nvarchar(max) as
begin
declare @OutVar nvarchar(max);
exec someProcedure @InVar, @OutVar out;
return @OutVar
end
我想要:
select *, dbo.test(ID)
from SomeTable
似乎您想从功能test
中执行存储过程someProcedure
。这也是您明确要求的。
不允许,因此您不能这样做。SQL Server中的功能永远不允许具有副作用。
如微软关于用户定义功能的文档中所述:
BEGIN...END
块中的语句不能具有任何副作用。功能副作用是对资源状态的任何永久更改,该更改具有范围之外的范围,例如对数据库表的修改。该函数语句可以做出的唯一更改是对函数本地的对象的更改,例如本地光标或变量。对数据库表的修改,对不本地函数本地的光标操作,发送电子邮件,尝试进行目录修改以及生成返回用户的结果集的示例是无法在函数中执行的操作的示例。<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<</p>注意
如果
CREATE FUNCTION
语句对发出CREATE FUNCTION
语句时不存在的资源产生副作用,则SQL Server执行语句。但是,SQL Server调用该函数时不会执行该函数。
因此,您似乎必须找到另一种策略才能完成您想要的事情。
您的代码是完美的,但由于
而无法运行只能从功能中执行功能,并且可以执行一些扩展的存储过程。
我建议您而不是SP在函数本身中实现逻辑。