运行目录中的所有SQL文件

K.A*_*.D. 112 sql sql-server batch-processing

我有一些.sql文件,我必须运行这些文件才能在SQL Server 2005数据库上应用其他开发人员所做的更改.文件根据以下模式命名:

0001 - abc.sql
0002 - abcef.sql
0003 - abc.sql
...
Run Code Online (Sandbox Code Playgroud)

有没有办法一次性运行所有这些?

小智 136

使用以下命令创建.BAT文件:

for %%G in (*.sql) do sqlcmd /S servername /d databaseName -E -i"%%G"
pause
Run Code Online (Sandbox Code Playgroud)

将此.BAT文件放在要从中执行.SQL文件的目录中,双击.BAT文件即可完成!

  • @SanjayMaharjan使用-U表示用户,-P表示密码,例如:`for %% G in(*.sql)do sqlcmd/S servername/d databaseName -U username -P"password"-i"%% G"` (9认同)
  • 当我执行批处理文件时,会出现一些身份验证问题,说"登录失败.登录来自不受信任的域,不能用于Windows身份验证.".有没有办法像服务器名称和数据库一样提供用户名和密码? (2认同)

Rem*_*anu 69

使用FOR.从命令提示符:

c:\>for %f in (*.sql) do sqlcmd /S <servername> /d <dbname> /E /i "%f"
Run Code Online (Sandbox Code Playgroud)

  • 我必须在最后一个"%f"周围添加引号,以使其适用于包含空格的脚本 (2认同)
  • @Rich要将输出重定向到文件,请使用以下命令:`for%f in(*.sql)do sqlcmd/S <servername>/d <dbname>/E/i"%f">> sql.log 2>&1 )`你可以阅读更多关于输出重定向的信息[这里](http://www.robvanderwoude.com/battech_redirection.php) (2认同)

小智 22

  1. 在SQL Management Studio中打开一个新查询并键入所有文件,如下所示

    :r c:\Scripts\script1.sql
    :r c:\Scripts\script2.sql
    :r c:\Scripts\script3.sql
    
    Run Code Online (Sandbox Code Playgroud)
  2. 转到SQL Management Studio上的"查询"菜单,确保已启用SQLCMD模式
  3. 点击SQLCMD模式; 文件将以灰色选择,如下所示

    :r c:\Scripts\script1.sql
    :r c:\Scripts\script2.sql
    :r c:\Scripts\script3.sql
    
    Run Code Online (Sandbox Code Playgroud)
  4. 现在执行

  • @devlincarnate在较新版本的Windows中,您可以按住Shift键,右键单击文件,然后选择“复制为路径”。从那里,按 CTRL+V 进入 SSMS 窗口。它也适用于多个文件。在资源管理器中选择两个或多个文件,右键单击任何突出显示的文件,然后选择“复制为路径”。重复 SSMS 中的步骤。文件路径用双引号括起来,您可能希望也可能不想在 SSMS 中使用“查找/替换”将其删除。 (4认同)
  • 如果我有数百个文件,这真的很乏味。 (3认同)

Ash*_*pta 20

通过单击管理工作室中的"查询">"SQLCMD模式"选项,确保已启用SQLCMD.

  1. 假设您script1.sql,script2.sql,script3.sql,script4.sql在文件夹中有四个.sql文件()c:\scripts.

  2. 使用以下命令创建主脚本文件(Main.sql):

    :r c:\Scripts\script1.sql
    :r c:\Scripts\script2.sql
    :r c:\Scripts\script3.sql
    :r c:\Scripts\script4.sql
    
    Run Code Online (Sandbox Code Playgroud)

    将Main.sql保存在c:\ scripts本身中.

  3. 创建一个ExecuteScripts.bat使用以下命名的批处理文件:

    SQLCMD -E -d<YourDatabaseName> -ic:\Scripts\Main.sql
    PAUSE
    
    Run Code Online (Sandbox Code Playgroud)

    请记住替换<YourDatabaseName>要执行脚本的数据库.例如,如果数据库是"Employee",则命令如下:

    SQLCMD -E -dEmployee -ic:\Scripts\Main.sql
    PAUSE
    
    Run Code Online (Sandbox Code Playgroud)
  4. 双击批处理文件执行批处理文件.


小智 12

我发现的最简单的方法包括以下步骤(唯一的要求是它必须在 Win7+ 中):

  • 在资源管理器中打开文件夹
  • 选择所有脚本文件
  • 按 Shift
  • 右键单击选择并选择“复制为路径”
  • 转到 SQL Server 管理工作室
  • 创建新查询
  • 查询菜单,“SQLCMD 模式”
  • 粘贴列表,然后按 Ctrl+H,将 '"C:\'(或任何驱动器号)替换为 ':r "C:'(即在行前加上 ':r ')
  • 运行查询

听起来很长,但实际上非常快..(即使是最小的步骤,听起来也很长)


Kev*_*n L 9

您可以使用ApexSQL Propagate.它是一个免费工具,可在多个数据库上执行多个脚本.您可以根据需要选择任意数量的脚本,并针对一个或多个数据库(甚至多个服务器)执行它们.您可以创建脚本列表并保存它,然后只需在每次要按创建的顺序执行相同脚本时选择该列表(也可以添加多个脚本列表):

选择脚本

选择脚本和数据库后,它们将显示在主窗口中,您只需单击"执行"按钮,所有脚本将按给定顺序在选定的数据库上执行:

脚本执行


Lij*_*ijo 8

一般查询

将以下行保存在记事本中,名称为batch.bat, 并放在所有脚本文件所在的文件夹中

 for %%G in (*.sql) do sqlcmd /S servername /d databasename  -i"%%G"
    pause
Run Code Online (Sandbox Code Playgroud)

对于(*.sql)中的%% G执行sqlcmd/S NFGDDD23432/d EMPLYEEDB -i"%% G"暂停

有时如果登录失败,请使用以下代码和用户名密码

for %%G in (*.sql) do sqlcmd /S SERVERNAME /d DBNAME -U USERNAME -P PASSWORD -i"%%G"
pause
Run Code Online (Sandbox Code Playgroud)

对于(*.sql)中的%% G执行sqlcmd/S NE8148server /d EMPLYEEDB -U Scott -P tiger -i"%% G"暂停

在脚本文件所在的文件夹中创建bat文件后,只需单击将执行脚本的bat文件


Cli*_*ard 5

我在C#中编写了一个开源实用程序,它允许您拖放许多SQL文件并开始针对数据库运行它们.

该实用程序具有以下功能:

  • 拖放脚本文件
  • 运行脚本文件目录
  • Sql脚本在执行期间输出消息
  • 脚本通过或失败,颜色为绿色和红色(黄色表示运行)
  • 停止错误选项
  • 在错误选项上打开脚本
  • 运行报告,为每个脚本花费时间
  • 总持续时间
  • 测试数据库连接
  • Asynchronus
  • .Net 4并使用SQL 2008进行测试
  • 单个exe文件
  • 随时杀死连接