131

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

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

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

4

14 回答 14

163

使用以下命令创建一个 .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 文件即可!

于 2011-06-28T09:24:43.800 回答
72

使用FOR。从命令提示符:

c:\>for %f in (*.sql) do sqlcmd /S <servername> /d <dbname> /E /i "%f"
于 2010-04-06T17:27:35.230 回答
31
  1. 在 SQL Management Studio 中打开一个新查询并键入所有文件,如下所示

    :r c:\Scripts\script1.sql
    :r c:\Scripts\script2.sql
    :r c:\Scripts\script3.sql
    
  2. 转到 SQL Management Studio 上的查询菜单并确保启用 SQLCMD 模式
  3. 点击 SQLCMD 模式;文件将被选择为灰色,如下所示

    :r c:\Scripts\script1.sql
    :r c:\Scripts\script2.sql
    :r c:\Scripts\script3.sql
    
  4. 现在执行
于 2015-06-05T13:04:50.207 回答
24

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

  1. 假设您在一个文件夹中有四个 .sql 文件 ( script1.sql,script2.sql,script3.sql,script4.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
    

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

  3. 创建一个批处理文件ExecuteScripts.bat,名称如下:

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

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

    SQLCMD -E -dEmployee -ic:\Scripts\Main.sql
    PAUSE
    
  4. 通过双击相同的执行批处理文件。

于 2010-04-06T10:14:14.530 回答
19

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

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

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

于 2020-01-07T10:41:27.897 回答
10

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

选择脚本

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

脚本执行

于 2017-08-14T13:37:25.907 回答
8

一般查询

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

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

例子

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

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

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

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

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

于 2016-06-16T08:16:34.493 回答
5

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

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

  • 拖放脚本文件
  • 运行脚本文件目录
  • Sql Script在执行期间输出消息
  • 脚本通过或失败,颜色为绿色和红色(黄色表示运行)
  • 停止错误选项
  • 错误选项时打开脚本
  • 运行每个脚本所用时间的报告
  • 总持续时间
  • 测试数据库连接
  • 异步
  • .Net 4 并使用 SQL 2008 测试
  • 单个exe文件
  • 随时终止连接
于 2012-03-07T04:30:53.550 回答
3

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

使用 SQLCMD 执行多个 SQL Server 脚本

OSQL(这是用于 sql server 2000)

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

于 2010-04-06T08:40:11.260 回答
2
@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
)

Step1:以上行复制到记事本保存为bat。

step2:在d盘abc文件夹中的所有Sql文件中,在sql server中执行查询。

step3:输入你的ip、用户名和密码。

于 2019-01-24T11:26:59.713 回答
1

我知道这个问题更侧重于 SQL Server。我有同样的问题,但对于 PostgreSQL。该解决方案非常符合我的需要,所以我想我会为任何需要它的人分享我得到的东西:

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

我从包含我所有 sql 脚本的文件夹中运行它。

为了避免被提示输入密码,我不得不添加

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

到我的pgpass.conf文件中

%APPDATA%\Roaming\postgresql\ 

windows 上的文件夹。我必须自己创建文件。

于 2022-01-04T03:01:36.947 回答
0

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

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

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

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

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

于 2014-03-27T08:21:11.483 回答
0

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

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

该命令将创建一个单独的 SQL 文件,目录中的每个 SQL 文件的名称都附加“@”。

创建后all.sql只需all.sql使用 SQLPlus 执行,这将执行all.sql.

于 2017-02-23T05:48:22.747 回答
0

如果可以使用 Interactive SQL:

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

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

2 - 更改密码和服务器名称。

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

于 2019-08-07T15:13:29.870 回答