问题:
我正在使用链接服务器从远程服务器调用存储过程。虽然这在大多数时候都可以正常工作,但我有许多使用表值参数(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调用远程服务器。
现在有人如何(如果可以)从存储过程访问此查询?访问它自己的探查器,如查询,以便我可以远程发送它?
答案 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