['vivid]生动的,鲜明的,鲜艳的,大胆的,清晰的,活泼的,逼真的

Let us cling together!

 

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

但是这样写在函数中一样不允许,所以在函数中调用带参数的存储过程还是没想到办法。

posted on 2010-02-11 10:48  文祥  阅读(477)  评论(0编辑  收藏  举报

导航