我的服务器上有几个链接服务器(大约20台服务器)。在这些服务器上存在一个类似的数据库,我想在这些服务器上执行存储过程,这取决于我服务器上存储过程的参数。我有以下查询这个想法。
Create procedure test
(
@ServerName VarChar(100),
@Code int
)
As
IF(@ServerName = 'Server1')Begin
Exec Server1.SGDB.dbo.DocInsert @Code
End Else IF(@ServerName = 'Server2')Begin
Exec Server2.SGDB.dbo.DocInsert @Code
End Else IF(@ServerName = 'Server3')Begin
Exec Server3.SGDB.dbo.DocInsert @Code
.
.
.
End Else IF(@ServerName = 'Server20')Begin
Exec Server20.SGDB.dbo.DocInsert @Code
End
End
我是否可以使用@ServerName
参数进行动态查询而不使用exec(字符串命令)。
提前感谢。
答案 0 :(得分:1)
您可以使用此动态SQL替换存储过程的主体:
declare @sql nvarchar(max)
set @sql = N'Exec ' + @ServerName + N'.SGDB.dbo.DocInsert @Code'
exec sp_executesql @stmt = @sql, @params = N'@Code int', @Code = @Code
最好将参数@ServerName
声明为NVarChar(128)
以始终使用Unicode字符并允许链接服务器名称的最大长度。