从链接服务器返回变量

Returning Variables from Linked Servers

我需要编写一个存储过程,它将 return 从链接服务器获取的参数值。

我已经尝试在动态 sql 的内部和外部声明变量,但它失败了,必须声明变量错误。

declare @srvr nvarchar(100)
declare @dbn nvarchar(50) 

set @srvr = 'ServerName'
set @dbn = 'DatabaseName'

Declare @sql nvarchar(max)

set @sql = 'declare @param nvarchar(50) set @param = (Select X from [' + @srvr + '].[' + @dbn + '].[TableName])' 

exec (@sql)
print @param

这将形成驻留在中央数据库中的多个过程的框架,当将其他数据库恢复到环境中时将调用这些过程,形成 'prep script' 种类的一部分

有什么想法吗?

非常感谢

您需要声明变量两次。一次用于内部上下文,一次用于外部上下文。他们不需要内外都使用相同的名字:

declare @srvr nvarchar(100)
declare @dbn nvarchar(50) 

set @srvr = N'ServerName'
set @dbn = N'DatabaseName'

Declare @sql nvarchar(max)
declare @parms nvarchar(max)
set @sql = N'set @param = (Select X from [' + @srvr + '].[' + @dbn + '].[TableName])'
set @parms = N'@param nvarchar(50) output'
declare @param2 nvarchar(50)

exec sp_executesql @sql,@parms,@param = @param2 output
print @param2