我正在尝试通过链接服务器调用远程存储过程。问题是,所需参数之一是用户定义的表类型。
我似乎无法弄清楚如何从远程服务器将局部变量声明为用户定义的表类型。
这是我到目前为止所尝试的,但它不起作用:
DECLARE @tblVar [REMOTESERVER].REMOTEDB.dbo.user_defined_table_type
EXEC [REMOTESERVER].REMOTEDB.dbo.procedure_name (@param1 = @tblVar)
然而,我得到的错误是:
类型名称“REMOTESERVER.REMOTEDB.dbo”包含的前缀数量超过最大数量。最大值为1。
必须声明标量变量“@tblVar”
答案 0 :(得分: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
这解决了我的问题。希望这将有助于将来的其他人。