使用用户定义的表类型变量参数执行远程过程

Lev*_*i W 4 t-sql sql-server linked-server user-defined-types sql-server-2008-r2

我正在尝试通过链接服务器调用远程存储过程.问题是,所需参数之一是用户定义的表类型.

我似乎无法弄清楚如何从远程服务器将局部变量声明为用户定义的表类型.

这是我到目前为止所尝试的,但它不起作用:

DECLARE @tblVar [REMOTESERVER].REMOTEDB.dbo.user_defined_table_type

EXEC [REMOTESERVER].REMOTEDB.dbo.procedure_name (@param1 = @tblVar)
Run Code Online (Sandbox Code Playgroud)

但是我得到的错误是:

类型名称"REMOTESERVER.REMOTEDB.dbo"包含的前缀数量超过最大数量.最大值为1.

必须声明标量变量"@tblVar"

Lev*_*i W 7

经过进一步研究,我发现表变量对远程过程调用无效.

相反,我所做的就是调用EXEC [REMOTESERVER].[REMOTEDB]..sp_executesql并声明并填充我的表变量,并在其中调用存储过程.

例:

DECLARE @SQL nvarchar(4000)
SET @SQL = N'
DECLARE @tblVar dbo.user_defined_table_type
-- Code to populate table here
EXEC dbo.procedure_name (@param1 = @tblVar)
'
EXEC [REMOTESERVER].[REMOTEDB]..sp_executesql @stmt = @SQL
Run Code Online (Sandbox Code Playgroud)

这解决了我的问题.希望这将有助于其他人在未来.