我有一些。为了应用其他开发人员对 SQLServer2005数据库所做的更改,我必须运行 SQL 文件。 这些文件的命名方式如下:
0001 - abc.sql 0002 - abcef.sql 0003 - abc.sql ...
有没有办法一次性全部运行?
据我所知,您可以使用 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。
假设在 c:\scripts文件夹中有4个. sql 文件(script1.sql,script2.sql,script3.sql,script4.sql)。
c:\scripts
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
在 c: script 本身中保存 Main.sql。
创建一个名为 ExecuteScripts.bat的批处理文件,其中包含以下内容:
ExecuteScripts.bat
SQLCMD -E -d<YourDatabaseName> -ic:\Scripts\Main.sql PAUSE
请记住用要执行脚本的数据库替换 <YourDatabaseName>。例如,如果数据库是“ Employee”,则命令如下:
<YourDatabaseName>
SQLCMD -E -dEmployee -ic:\Scripts\Main.sql PAUSE
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 文件,并开始对数据库运行它们。
该实用程序具有以下特点:
您可以创建一个调用所有其他脚本的脚本。
将以下内容放入批处理文件:
@echo off echo.>"%~dp0all.sql" for %%i in ("%~dp0"*.sql) do echo @"%%~fi" >> "%~dp0all.sql"
当您运行该批处理文件时,它将在该批处理文件所在的同一目录中创建一个名为 all.sql的新脚本。它将在批处理文件所在的同一目录中查找扩展名为 .sql的所有文件。
all.sql
.sql
然后可以使用 sqlplus user/pwd @all.sql运行所有脚本(或者在创建 all.sql脚本之后扩展批处理文件来调用 sqlplus)
sqlplus user/pwd @all.sql
sqlplus
在 SQLManagementStudio 中打开一个新查询并键入所有文件,如下所示
:r c:\Scripts\script1.sql :r c:\Scripts\script2.sql :r c:\Scripts\script3.sql
Click on SQLCMD Mode; files will be selected in grey as below
一般查询
将下面的代码行保存在名为 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 传播。它是一个在多个数据库上执行多个脚本的免费工具。您可以根据需要选择任意多个脚本,并对一个或多个数据库(甚至多个服务器)执行它们。您可以创建脚本列表并保存它,然后只需选择该列表,每次您想执行这些脚本在创建的顺序(多个脚本列表也可以添加) :
当脚本和数据库被选中时,它们将显示在主窗口中,你所要做的就是点击“执行”按钮,所有的脚本将按照给定的顺序在选中的数据库中执行:
@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 + 中) :
这听起来很长,但实际上非常快(听起来就像我描述的最小的步骤一样长)。
我知道这个问题更侧重于 SQLServer。我也有同样的问题,但是对于 PostgreSQL。这个解决方案已经非常接近我所需要的了,所以我想我可以把我得到的分享给任何需要它的人:
for %f in (*.sql) do psql -U [username] -d [database name] --command="\i %f";
我在包含所有 sql 脚本的文件夹中运行这个命令。
为了避免被提示输入密码,我必须添加
*:*:*:[user]:[password]
我的 Pgpass.conf文件
%APPDATA%\Roaming\postgresql\
我必须自己创建文件。