我有一个带功能的SQL脚本(功能放到脚本末尾),临时表定义和变量来处理数据,这些数据使我获得了一行数据库结果。
它可以工作,但是我需要运行并获取1000个数据库的所有结果。似乎不可能单独运行脚本。
我找到了sp_MSForEachDB
个命令行示例,但是我有一个完整的脚本,因此无法以这种方式工作。
是否可以在所有数据库上运行脚本?
感谢回复
答案 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"