运行目录中的所有 SQL 文件

我有一些。为了应用其他开发人员对 SQLServer2005数据库所做的更改,我必须运行 SQL 文件。 这些文件的命名方式如下:

0001 - abc.sql
0002 - abcef.sql
0003 - abc.sql
...

有没有办法一次性全部运行?

205641 次浏览

据我所知,您可以使用 osql 或 sqlcmd 命令来执行多个 sql 文件。缺点是您必须为这两个命令创建一个脚本。

使用 SQLCMD 执行多个 SQLServer 脚本

OSQL (这是针对 sql server 2000的)

Http://msdn.microsoft.com/en-us/library/aa213087(v=sql.80).aspx

在管理工作室中单击 Query > SQLCMD mode 选项,确保启用了 SQLCMD。

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

  2. 创建一个主脚本文件(Main.sql) ,其中包含以下内容:

    :r c:\Scripts\script1.sql
    :r c:\Scripts\script2.sql
    :r c:\Scripts\script3.sql
    :r c:\Scripts\script4.sql
    

    在 c: script 本身中保存 Main.sql。

  3. 创建一个名为 ExecuteScripts.bat的批处理文件,其中包含以下内容:

    SQLCMD -E -d<YourDatabaseName> -ic:\Scripts\Main.sql
    PAUSE
    

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

    SQLCMD -E -dEmployee -ic:\Scripts\Main.sql
    PAUSE
    
  4. Execute the batch file by double clicking the same.

在命令提示符下使用 为了:

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

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

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

如果您需要提供用户名和密码

for %%G in (*.sql) do sqlcmd /S servername /d databaseName -U username -P
password -i"%%G"

请注意,在提供用户/密码时不需要“-E”

把这个放下。属性所在的目录中的 BAT 文件。要执行的 SQL 文件,请双击。BAT 文件和你完成!

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

该实用程序具有以下特点:

  • 拖放脚本文件
  • 运行脚本文件目录
  • 在执行过程中编写输出消息的脚本
  • 通过或失败的脚本颜色为绿色和红色(运行时为黄色)
  • 错误停止选项
  • 打开错误脚本选项
  • 运行每个脚本所需时间的报告
  • 总持续时间
  • 测试数据库连接
  • 异步人
  • .Net 4 & 使用 SQL 2008进行测试
  • 单个 exe 文件
  • 随时关闭连接

您可以创建一个调用所有其他脚本的脚本。

将以下内容放入批处理文件:

@echo off
echo.>"%~dp0all.sql"
for %%i in ("%~dp0"*.sql) do echo @"%%~fi" >> "%~dp0all.sql"

当您运行该批处理文件时,它将在该批处理文件所在的同一目录中创建一个名为 all.sql的新脚本。它将在批处理文件所在的同一目录中查找扩展名为 .sql的所有文件。

然后可以使用 sqlplus user/pwd @all.sql运行所有脚本(或者在创建 all.sql脚本之后扩展批处理文件来调用 sqlplus)

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

    :r c:\Scripts\script1.sql
    :r c:\Scripts\script2.sql
    :r c:\Scripts\script3.sql
    
  2. Go to Query menu on SQL Management Studio and make sure SQLCMD Mode is enabled
  3. Click on SQLCMD Mode; files will be selected in grey as below

    :r c:\Scripts\script1.sql
    :r c:\Scripts\script2.sql
    :r c:\Scripts\script3.sql
    
  4. Now execute

一般查询

将下面的代码行保存在名为 Batch 蝙蝠的记事本中,并将其放置在所有脚本文件所在的文件夹中

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

例子

对于(* . sql)中的% G,执行 sqlcmd/SNFGDDD23432/d雇员教育局-i“%% G” 暂停

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

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

对于(* . sql)中的% G,执行 sqlcmd/S NE8148服务器/d 雇员教育局-U 斯科特-P 老虎-i“%% G” 暂停

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

要执行同一目录中的每个 SQLfile,请使用以下命令:

ls | awk '{print "@"$0}' > all.sql

此命令将创建一个 SQL 文件,其中“@”后面附加了目录中每个 SQL 文件的名称。

创建 all.sql之后,只需使用 SQLPlus 执行 all.sql,就可以执行 all.sql中的每个 sql 文件。

你可以用 ApexSQL 传播。它是一个在多个数据库上执行多个脚本的免费工具。您可以根据需要选择任意多个脚本,并对一个或多个数据库(甚至多个服务器)执行它们。您可以创建脚本列表并保存它,然后只需选择该列表,每次您想执行这些脚本在创建的顺序(多个脚本列表也可以添加) :

Select scripts

当脚本和数据库被选中时,它们将显示在主窗口中,你所要做的就是点击“执行”按钮,所有的脚本将按照给定的顺序在选中的数据库中执行:

Scripts execution

@echo off
cd C:\Program Files (x86)\MySQL\MySQL Workbench 6.0 CE


for %%a in (D:\abc\*.sql) do (
echo %%a
mysql --host=ip --port=3306 --user=uid--password=ped < %%a
)

步骤1: 上面几行复制到记事本中,另存为 bat。

步骤2: 在 Sql 服务器中执行的查询中的所有 Sql 文件中的 d 驱动器 abc 文件夹。

步骤3: 提供 ip、用户 ID 和密码。

如果可以使用 InteractiveSQL:

1-使用以下代码创建一个.BAT 文件:

@ECHO OFF ECHO
for %%G in (*.sql) do dbisql -c "uid=dba;pwd=XXXXXXXX;ServerName=INSERT-DB-NAME-HERE" %%G
pause

2-更改 pwd 和 ServerName。

3-将.BAT 文件放在包含.SQL 文件的文件夹中并运行它。

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

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

这听起来很长,但实际上非常快(听起来就像我描述的最小的步骤一样长)。

我知道这个问题更侧重于 SQLServer。我也有同样的问题,但是对于 PostgreSQL。这个解决方案已经非常接近我所需要的了,所以我想我可以把我得到的分享给任何需要它的人:

for %f in (*.sql) do psql -U [username] -d [database name] --command="\i %f";

我在包含所有 sql 脚本的文件夹中运行这个命令。

为了避免被提示输入密码,我必须添加

*:*:*:[user]:[password]

我的 Pgpass.conf文件

%APPDATA%\Roaming\postgresql\

我必须自己创建文件。