SQL Server:在所有数据库上运行脚本

时间:2018-07-18 09:01:12

标签: sql-server tsql

我有一个带功能的SQL脚本(功能放到脚本末尾),临时表定义和变量来处理数据,这些数据使我获得了一行数据库结果。

它可以工作,但是我需要运行并获取1000个数据库的所有结果。似乎不可能单独运行脚本。

我找到了sp_MSForEachDB个命令行示例,但是我有一个完整的脚本,因此无法以这种方式工作。

是否可以在所有数据库上运行脚本?

感谢回复

2 个答案:

答案 0 :(得分:2)

我并不是说这是一个好主意,因为我们真的不知道您正在运行的脚本是做什么的,但这应该可以工作。我不羡慕在正确的位置获取所有单引号的痛苦,但这是我们使用无证件,不受支持的存储过程所要付出的代价。

DECLARE @sqlText varchar(max); 

SET @sqlText = 'IF ''?'' NOT IN(''master'', ''model'', ''msdb'', ''tempdb'') 
  BEGIN 
    USE ? 
    EXEC(''CREATE <functions, tables, what have you>'') 
  END';

EXECUTE sp_MSforeachdb @sqlText;

答案 1 :(得分:0)

嗨,在SSMS中,您可以使用sqlcmd命令为所选数据库运行脚本。 例如,在这里我想在两个不同的数据库中运行脚本,因为我已将脚本保存在本地。并使用:r“ C:\ temp \ test1.sql” 进行调用。

我仍然在考虑使用循环的另一种方法。

启用sql模式SSMS>查询> SQLCMD模式

use test
:r  "C:\temp\test1.sql"
use S2VTST6
:r  "C:\temp\test1.sql"