2013-05-14 53 views
0

問題:如何輕鬆將TVP與鏈接的服務器一起使用?

我正在使用鏈接服務器從遠程服務器調用存儲過程。雖然這在大多數情況下都能正常工作,但我有許多使用表值參數(TVPs)的存儲過程。 MSSQL不能調用使用作爲參數TVP的遠程SP。

解決方法是在遠程sql上執行sql並在那裏創建tvps。這再次工作正常。

問題是我必須編寫字符串來調用SP。在我有幾個TVP的情況下,這或多或少容易些,但我有很多TVP的SP。

現在,剖析一個存儲過程調用時,從.NET調用在TVP參數的存儲過程的例子中是SQL的樣子:

declare @p1 <type> 
insert into @p1 values(...) 
insert into @p1 values(...) 

...

exec myProc @p1 

我想要做的是在我的服務器上的包裝(與sp遠程相同),並使用exec sql調用遠程服務器。

現在是否有人可以(如果我可以)從存儲過程訪問此查詢?像查詢一樣訪問它自己的分析器,以便我可以將它發送到遠程?

回答

0

好了,所以基本上解決方案是這樣的(那種能自動化一半的問題):

declare @tvpVal_string nvarchar(max) = 'declare @tvpVal myTVPType;' 
set tvpVal_string += isnull(stuff((select ';insert into @tvpVal values('+...your values...+')' as [text()] from @tvpVal from xml path('')),1,1,'')+';',''); 

declare @sql nvarchar(max) = tvpVal_string + 
'exec myProc @[email protected], 
      @[email protected]' 

exec [REMOTESRV].DB..sp_executesql @sql,'@OtherVal type',@OtherVal 
相關問題