我在具有类似架构的多个服务器(SQL Server 2008)上有多个数据库。我想在每个上执行存储过程。现在我必须通过SQL Server管理工作室在每台服务器上逐个执行。
SQL Server Management Studio中是否有任何可能/选项,我只能在所有数据库上执行一次SP。
答案 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和批处理脚本
将以下查询粘贴到SSMS中并运行它,替换为
您可能希望更改脚本并将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提供此功能)
(你绝对应该先在一个数据库中测试这个脚本)
复制输出并粘贴到文本文件中。将文本文件另存为MyFirstBatchFile.CMD。双击此文件
检查输出文件(C:\ YourOutputLog.TXT)
这不会第一次起作用 - 我只是在飞行中构建它以向您展示如何完成它。如果/当您收到第一个错误时,请坐下来看看您是否可以自己解决。
如果您需要定期执行此操作,那么您可以考虑如何自动执行此操作。例如,有一种方法可以自动获取服务器列表(提示:SQLCMD -L
)
如果您要定期管理多台服务器,则应考虑使用Powershell。