我有一个SQL脚本,其中包含一个函数(函数在脚本末尾删除)、临时表定义和变量来处理数据,这些数据为数据库提供了一行结果。
它可以工作,但我需要运行并获得1000个数据库的所有结果。单独运行脚本似乎是不可能的。
我已经找到了sp_MSForEachDB
的单个命令行示例,但我有一个完整的脚本,无法让它以这种方式工作。
有没有办法在所有数据库上运行一个脚本?
感谢您的回复
发布于 2018-07-18 11:49:59
我并不是说这是一个好主意,因为我们并不真正知道您运行的这个脚本是做什么的,但这应该是可行的。我不羡慕您将所有的单引号放在正确位置的痛苦,但这是我们使用未记录的、不受支持的存储过程所付出的代价。
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;
发布于 2018-07-18 10:22:43
您好,在SSMS中,您可以使用sqlcmd命令为选定的数据库运行脚本。例如,在这里,我想在两个不同的数据库中运行我的脚本,因为我已经将脚本保存在本地。并使用调用它:r "C:\temp\test1.sql"。
尽管如此,我仍然在考虑使用循环的另一种方法。
启用sql模式SSMS >查询> SQLCMD模式
use test
:r "C:\temp\test1.sql"
use S2VTST6
:r "C:\temp\test1.sql"
https://stackoverflow.com/questions/51397798
复制相似问题