我需要编写一个存储过程,它将返回从链接服务器获取的参数值。
我已经尝试在动态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
这将构成驻留在中央数据库中的多个过程的框架,当将其他数据库恢复到构成“预备脚本”的环境的环境中时,将调用这些过程
有什么想法吗?
非常感谢
答案 0 :(得分:0)
您需要声明变量两次。一次针对内部上下文,一次针对外部上下文。他们不需要在里面和外面使用相同的名称:
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