sql server在多个服务器上执行命令

时间:2014-04-05 11:39:48

标签: sql-server sql-server-2008-r2 sql-server-2012

我的服务器上有几个链接服务器(大约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(字符串命令)。

提前感谢。

1 个答案:

答案 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字符并允许链接服务器名称的最大长度。