4

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

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

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

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

EXEC [REMOTESERVER].REMOTEDB.dbo.procedure_name (@param1 = @tblVar)

但是我得到的错误是:

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

必须声明标量变量“@tblVar”

4

1 回答 1

10

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

相反,我所做的是调用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

这解决了我的问题。希望这将在未来帮助其他人。

于 2012-10-04T20:09:12.777 回答