在SQL查询中运行.sql文件

Fun*_*onk 2 t-sql sql-server

我有一个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
Run Code Online (Sandbox Code Playgroud)

- 等等....

我在网上找了一堆,找到了一种在sqlcmd批处理文件中做类似事情的方法,但它不起作用,我也看不到如何以这种方式切换数据库.

万分感谢!

Fil*_*Vos 5

您可以将management studio切换到sqlcmd模式(查询菜单),然后运行脚本 :r script.sql

要在动态生成的数据库列表上执行此操作,您必须执行一些sqlcmd技巧:

  • 将输出设置为文件
  • 生成要执行的命令
  • 将输出设置为stdout
  • 执行文件
  • 删除临时文件

我假设在这个例子中存在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
Run Code Online (Sandbox Code Playgroud)