如何轻松地将TVP与链接服务器一起使用?

时间:2013-05-14 06:42:57

标签: sql sql-server sql-server-2008 tsql

问题:

我正在使用链接服务器从远程服务器调用存储过程。虽然这在大多数时候都可以正常工作,但我有许多使用表值参数(TVP)的存储过程。 MSSQL无法调用用作参数TVP的远程SP。

解决方法是在远程sql上执行sql并在那里构建tvps。再次这很好。

问题是我必须编写字符串来调用SP。在我有少量TVP的情况下,这或多或少都很容易,但我有很多TVP的SP。

现在,在分析存储过程调用时,如果是TVP参数存储过程,从.NET到sql的调用如下所示:

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

...

exec myProc @p1

我想要做的是我的服务器上的包装器(与sp remote相同),并在使用exec sql调用远程服务器。

现在有人如何(如果可以)从存储过程访问此查询?访问它自己的探查器,如查询,以便我可以远程发送它?

1 个答案:

答案 0 :(得分: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 @tvpVal=@tvpVal,
             @OtherVal=@OtherVal'

exec [REMOTESRV].DB..sp_executesql @sql,'@OtherVal type',@OtherVal
相关问题