【发布时间】:2011-02-04 17:25:45
【问题描述】:
我必须运行一些 .sql 文件,以便将其他开发人员对 SQL Server 2005 数据库所做的更改应用到这些文件中。 这些文件根据以下模式命名:
0001 - abc.sql
0002 - abcef.sql
0003 - abc.sql
...
有没有办法一次性运行所有这些?
【问题讨论】:
标签: sql sql-server batch-processing
我必须运行一些 .sql 文件,以便将其他开发人员对 SQL Server 2005 数据库所做的更改应用到这些文件中。 这些文件根据以下模式命名:
0001 - abc.sql
0002 - abcef.sql
0003 - abc.sql
...
有没有办法一次性运行所有这些?
【问题讨论】:
标签: sql sql-server batch-processing
使用以下命令创建一个 .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 文件即可!
【讨论】:
for %%G in (*.sql) do sqlcmd /S servername /d databaseName -U username -P "password" -i"%%G"
使用FOR。在命令提示符下:
c:\>for %f in (*.sql) do sqlcmd /S <servername> /d <dbname> /E /i "%f"
【讨论】:
for %f in (*.sql) do sqlcmd /S <servername> /d <dbname> /E /i "%f" >> sql.log 2>&1) 您可以阅读有关输出重定向的更多信息here
在 SQL Management Studio 中打开一个新查询并键入以下所有文件
:r c:\Scripts\script1.sql
:r c:\Scripts\script2.sql
:r c:\Scripts\script3.sql
点击 SQLCMD 模式;文件将被选择为灰色,如下所示
:r c:\Scripts\script1.sql
:r c:\Scripts\script2.sql
:r c:\Scripts\script3.sql
【讨论】:
通过单击管理工作室中的查询 > SQLCMD 模式选项,确保您已启用 SQLCMD。
假设您在文件夹 c:\scripts 中有四个 .sql 文件 (script1.sql,script2.sql,script3.sql,script4.sql)。
使用以下内容创建一个主脚本文件 (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 本身中。
使用以下内容创建一个名为 ExecuteScripts.bat 的批处理文件:
SQLCMD -E -d<YourDatabaseName> -ic:\Scripts\Main.sql
PAUSE
请记住将<YourDatabaseName> 替换为您要执行脚本的数据库。例如,如果数据库是“Employee”,则命令如下:
SQLCMD -E -dEmployee -ic:\Scripts\Main.sql
PAUSE
双击执行批处理文件。
【讨论】:
-b 示例:SQLCMD -b -i "file 1.sql","file 2.sql"
我找到的最简单的方法包括以下步骤(唯一的要求是它必须在 Win7+ 中):
听起来很长,但实际上非常快..(听起来很长,就像我描述的最小的步骤一样)
【讨论】:
您可以使用ApexSQL Propagate。它是一个免费工具,可以在多个数据库上执行多个脚本。您可以根据需要选择任意数量的脚本并针对一个或多个数据库(甚至多个服务器)执行它们。您可以创建脚本列表并保存它,然后在每次要按创建的顺序执行相同的脚本时选择该列表(也可以添加多个脚本列表):
选择脚本和数据库后,它们将显示在主窗口中,您只需单击“执行”按钮,所有脚本将按给定顺序在选定的数据库上执行:
【讨论】:
一般查询
以 batch.bat 的名称将以下行保存在记事本中,并放在所有脚本文件所在的文件夹中
for %%G in (*.sql) do sqlcmd /S servername /d databasename -i"%%G"
pause
示例
for %%G in (*.sql) do sqlcmd /S NFGDDD23432 /d EMPLYEEDB -i"%%G" 暂停
如果您有时登录失败,请使用以下代码与 username 和 password
for %%G in (*.sql) do sqlcmd /S SERVERNAME /d DBNAME -U USERNAME -P PASSWORD -i"%%G"
pause
for %%G in (*.sql) do sqlcmd /S NE8148server /d EMPLYEEDB -U Scott -P 老虎 -i"%%G" 暂停
在您的脚本文件所在的文件夹中创建 bat 文件后,只需单击 bat 文件,您的脚本就会被执行
【讨论】:
我用 C# 编写了an open source utility,它允许您拖放许多 SQL 文件并开始针对数据库运行它们。
该实用程序具有以下功能:
【讨论】:
据我所知,您可以使用 osql 或 sqlcmd 命令来执行多个 sql 文件。缺点是您必须为这两个命令创建一个脚本。
Using SQLCMD to Execute Multiple SQL Server Scripts
OSQL(这是用于 sql server 2000)
http://msdn.microsoft.com/en-us/library/aa213087(v=SQL.80).aspx
【讨论】:
@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中执行查询。
第三步:提供你的 ip、用户名和密码。
【讨论】:
我知道这个问题更侧重于 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 上的文件夹。我必须自己创建文件。
【讨论】:
您可以创建一个调用所有其他脚本的单个脚本。
将以下内容放入批处理文件中:
@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)
【讨论】:
要在同一目录中执行每个 SQLfile,请使用以下命令:
ls | awk '{print "@"$0}' > all.sql
此命令将创建一个单独的 SQL 文件,目录中的每个 SQL 文件的名称都附加“@”。
all.sql 创建后,只需使用 SQLPlus 执行 all.sql,这将执行 all.sql 中的每个 sql 文件。
【讨论】:
如果您可以使用 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 文件的文件夹中并运行它。
【讨论】: