在多个服务器SQL Server上的多个数据库上执行存储过程

时间:2014-02-18 22:10:16

标签: sql-server sql-server-2008 stored-procedures

我在具有类似架构的多个服务器(SQL Server 2008)上有多个数据库。我想在每个上执行存储过程。现在我必须通过SQL Server管理工作室在每台服务器上逐个执行。

SQL Server Management Studio中是否有任何可能/选项,我只能在所有数据库上执行一次SP。

4 个答案:

答案 0 :(得分:3)

您可以使用组查询来针对多个服务器运行脚本。 Look here

然后使用@Ram提到的sp_MSForEachDB

答案 1 :(得分:3)

如果您想避免以编程方式进行操作,我可以通过两种方式建议。

1)在SSMS中使用已注册的服务器。可以将每个目标数据库创建为服务器组中的已注册服务器。然后,您可以右键单击服务器组并选择" New Query"。此查询将针对组中的所有已注册服务器执行。 This is explained in detail on MSSQLTips

2)SQL Multi Script是我们在Red Gate开发的专用工具,以满足此用例。但是,这并没有集成到SSMS中。

答案 2 :(得分:2)

使用sp_MSForEachDB存储过程,您应该能够在同一服务器的多个数据库上执行。

答案 3 :(得分:2)

环顾四周,我确信你可以编写一个PowerShell或批处理脚本来完成这项任务,但我没有时间学习,构建和测试一个。

所以我会用我最开心的语言来做:SQL和批处理脚本

  1. 将以下查询粘贴到SSMS中并运行它,替换为

    • 您的服务器列表
    • 包含您要运行的脚本的文件的路径(即替换YourSQLScript.SQL)
    • 日志文件的路径(即替换YourOutputLog.TXT)
  2. 您可能希望更改脚本并将SELECT @@SERVERNAME添加到开头,以将服务器记录到输出文件

    WITH ServerList As (
    SELECT 'Server1' ServerName UNION ALL
    SELECT 'Server2' UNION ALL
    SELECT 'Server3' UNION ALL
    SELECT 'Server4' UNION ALL
    SELECT 'Server5'
    )
    
    SELECT 
    'SQLCMD -S ' + ServerName + ' -E ' + ' -i C:\YourSqlScript.SQL -o C:\YourOutputLog.TXT'
    From ServerList
    UNION ALL
    SELECT 'PAUSE'
    

    因此,在此示例中,文件 C:\ YourSqlScript.SQL 应该包含以下内容:

    SELECT @@SERVERNAME
    EXEC sp_msforeachdb 'USE [?]; SELECT '?'; EXEC p_YourStoredProcedure;'
    

    (感谢RAM提供此功能)

    (你绝对应该先在一个数据库中测试这个脚本)

    1. 复制输出并粘贴到文本文件中。将文本文件另存为MyFirstBatchFile.CMD。双击此文件

    2. 检查输出文件(C:\ YourOutputLog.TXT)

    3. 这不会第一次起作用 - 我只是在飞行中构建它以向您展示如何完成它。如果/当您收到第一个错误时,请坐下来看看您是否可以自己解决。

      如果您需要定期执行此操作,那么您可以考虑如何自动执行此操作。例如,有一种方法可以自动获取服务器列表(提示:SQLCMD -L

      如果您要定期管理多台服务器,则应考虑使用Powershell。