Art*_*ros 5 sql database sql-server
我知道我的帖子与这个论坛中的其他帖子有着非常相似的标题,但我真的找不到我需要的答案.
这是我的问题,我在Windows Server上运行了一个SQL Server.在我的SQL Server中,我有大约30个数据库.它们都具有相同的表和相同的存储过程.
现在,问题是,我需要在所有这些数据库中运行这个庞大的脚本.我希望我只能对我的所有数据库做一次.
我尝试了一些事情,比如去"查看">>注册服务器>>本地服务器组>>新服务器注册.但这个解决方案适用于许多服务器,而不是很多数据库
我知道我可以通过输入数据库名称来实现,但查询真的很大,所以在所有数据库中运行都需要很长时间.
有没有人知道这是否可能?
ApexSQL Propagate是可以在这种情况下提供帮助的工具.它用于在多个数据库,甚至多个服务器上执行单个或多个脚本.您应该做的只是选择该脚本,然后选择要对其执行该脚本的所有数据库:
加载脚本和数据库时,只需单击"执行"按钮并等待结果:
您可以在所有数据库名称上使用WHILE循环,并在循环内使用EXECUTE执行查询。我认为这种说法SET @dbname = ...可能会更好,但这也有效。
DECLARE @rn INT = 1, @dbname varchar(MAX) = '';
WHILE @dbname IS NOT NULL
BEGIN
SET @dbname = (SELECT name FROM (SELECT name, ROW_NUMBER() OVER (ORDER BY name) rn
FROM sys.databases WHERE name NOT IN('master','tempdb')) t WHERE rn = @rn);
IF @dbname <> '' AND @dbname IS NOT NULL
EXECUTE ('use ['+@dbname+'];
/* Your script code here */
UPDATE some_table SET ... ;
');
SET @rn = @rn + 1;
END;
Run Code Online (Sandbox Code Playgroud)
考虑从SSMS(查询--SQLCMD模式)以SQLCMD模式运行脚本。这样,您可以将脚本保存到文件中,并轻松地在每个所需数据库的上下文中运行它:
USE DB1;
:r C:\SqlScript\YourLargeScript.sql
GO
USE DB2;
:r C:\SqlScript\YourLargeScript.sql
GO
USE DB3;
:r C:\SqlScript\YourLargeScript.sql
GO
Run Code Online (Sandbox Code Playgroud)