我需要此功能:
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
答案 0 :(得分:0)
似乎您想从函数someProcedure
中执行存储过程test
。这也是您明确要求的。
那是不允许的,所以您不能这样做。绝对不允许SQL Server中的函数产生副作用。
如Microsoft's documentation regarding User-Defined Functions中所述:
BEGIN...END
块中的语句不能有任何副作用。功能副作用是对资源状态的任何永久更改,该资源具有超出功能范围的范围,例如对数据库表的修改。函数中的语句只能进行的更改是对函数本地对象的更改,例如本地游标或变量。对数据库表的修改,对该函数而言不是本地游标的操作,发送电子邮件,尝试对目录进行修改以及生成返回给用户的结果集是无法在函数中执行的操作的示例。 / p>注意
如果发出
CREATE FUNCTION
语句时,CREATE FUNCTION
语句对不存在的资源产生副作用,则SQL Server执行该语句。但是,SQL Server在被调用时不会执行该函数。
所以看来您必须找到另一种策略来做您想要的事情。
答案 1 :(得分:0)
您的代码是完美的,但由于它不可运行
只能从一个函数中执行函数和某些扩展的存储过程。
我建议您而不是SP在函数本身中实现逻辑。