0

问题:

我正在使用链接服务器从远程服务器调用存储过程。虽然这在大多数情况下都可以正常工作,但我有许多使用表值参数 (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 远程相同),并使用 exec sql 调用远程服务器。

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

4

1 回答 1

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
于 2014-02-18T08:55:04.973 回答