2013-05-14 17 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 
相关问题