我有一个 SQL 脚本,需要在大约 20 个不同的数据库上运行。
我基本上只需要能够运行一些 SQL,然后让它从磁盘加载并运行一个文件,执行更多 SQL,再次运行相同的脚本,等等。
我希望制作一个基本上如下所示的 SQL 脚本:
use database1
go
exec c:\release.sql
go
use database2
go
exec c:\release.sql
go
use database3
go
exec c:\release.sql
go
- 等等....
我在网上看了一堆,找到了一种在批处理文件中使用 sqlcmd 执行类似操作的方法,但它不起作用,我也不知道如何以这种方式切换数据库。
万分感谢!
本
最佳答案
您可以将管理工作室切换到 sqlcmd 模式(查询菜单),然后使用 :r script.sql
运行脚本
要在动态生成的数据库列表上执行此操作,您必须执行一些 sqlcmd 技巧:
我假设在这个例子中文件 script.sql 存在于
c:\temp
.请注意 GO
语句在脚本中很重要,否则 sqlcmd 解析器会混淆。:OUT $(TEMP)\db.sql
declare @script nvarchar(max)
select @script = isnull(@script, '')
+ 'use ' + name + char(13) + char(10)
+ ':r c:\temp\script.sql' + char(13) + char(10)
from sys.databases
where name like N'%[_]db'
print @script
GO
:OUT stdout
:r $(TEMP)\db.sql
GO
!!del $(TEMP)\db.sql /s /q
关于sql-server - 在 SQL 查询中运行 .sql 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28331468/