Sql Server在UDF中调用SP
先执行EXEC sp_serveroption localserver, 'Data Access', true
函数的写法为:
create Function testfunction
()
RETURNS int
as
begin
declare @cnt int
select @cnt=2
declare @temptable table(col int)
insert into @temptable SELECT * FROM OPENQUERY(localserver, 'set nocount on;exec testprocedure;commit')
return @cnt
end
localserver是本地的机器名,testprocedure是要执行的存储过程。
如果不加set nocount on,执行存储过程第一句之后就返回了,就算是insert也是一样,set nocount on之后就会执行完整个存储过程。
开始的时候没有加commit,存储过程里面的insert语句总是不执行,返回的查询结果却是正确的,我才明白原来这样执行相当于在一个事务中,加上commit之后就应用到实际的表上面了。
如果想要给存储过程传递参数可以这样写:
declare @sql nvarchar(200)
set @sql='SELECT * FROM OPENQUERY(localserver, ''set nocount on;exec testprocedure '+'2'+';commit'')'
exec sp_executesql @sql
但是这样写在函数中一样不允许,所以在函数中调用带参数的存储过程还是没想到办法。