如何使用批处理文件运行多个 SQL 脚本?

Posted

技术标签:

【中文标题】如何使用批处理文件运行多个 SQL 脚本?【英文标题】:How to run multiple SQL scripts using a batch file? 【发布时间】:2012-01-13 07:27:41 【问题描述】:

我有一个案例,我有 10+ SQL script

我不想一个接一个地运行我的所有脚本。

有没有一种方法可以让我在SQL Management studio 中连续运行我的所有脚本。

我找到了this 的帖子。创建批处理文件似乎更容易。

这就是你所需要的:

@echo off
ECHO %USERNAME% started the batch process at %TIME%  >output.txt


for %%f in (*.sql) do (
 (
sqlcmd.exe  -S servername -E   -d databasename -i %%f >>output.txt
)


pause

正在替换服务器名和数据库名,但似乎不起作用。

有什么想法吗?

【问题讨论】:

运行批处理文件时 output.txt 中会出现什么? @MarkBannister Willem 在 10:50:30.46 开始批处理。然后什么都没有发生 如果您从批处理文件中删除@echo off 命令并重试,您会得到什么输出?另外,尝试将ECHO %PATH% 添加到批处理文件的开头并检查是否包含 SQLCMD.EXE 的路径。 @MarkBannister Willem 于 11:18:51.16 开始批处理。 路径怎么样 - 它是否包含 SQLCMD.EXE 的路径?此外,如果您尝试在命令提示符下交互式运行批处理命令,会发生什么情况? 【参考方案1】:

你有一个无与伦比的括号,那里。 试试

for %%f in (*.sql) do sqlcmd.exe -S servername -E -d databasename -i %%f >>output.txt

我刚刚将它保存在一个 .cmd 文件中,它似乎可以正常工作。

【讨论】:

【参考方案2】:

是的,这是可能的。您可以使用 SQLCMD 的 :r 命令来完成。

我强烈建议你阅读这篇文章并使用SQLCMD

http://www.mssqltips.com/sqlservertip/1543/using-sqlcmd-to-execute-multiple-sql-server-scripts/

【讨论】:

这可以在事务中运行所有脚本吗?如果任何脚本中有任何错误,则回滚并停止执行。【参考方案3】:

您可以创建一个 Stred Procedure 来调用您的所有脚本。您还可以创建一个计划来自动运行脚本。

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

【讨论】:

您是否收到了来自脚本的错误消息?您是否检查了“*.sql”的路径,它代表您要运行的 sql 脚本。 唯一的想法:尝试删除选项和参数之间的空格 还是什么都没有。它似乎只是跳过了所有文件......语法是否正确? 语法似乎没问题,试试下面的 ECHO %USERNAME% 在 %TIME% 开始批处理 >output.txt for %%f in (*.sql) do ( ( ECHO %% f >>output.txt ) 运行此脚本并查看是否所有 sql 文件都列在 otuput.txt 中(带有完整路径?) 不,只写Willem started the batch process at 11:18:51.16【参考方案4】:

这是一个开源实用程序,源代码http://scriptzrunner.codeplex.com/

此实用程序是用 c# 编写的,允许您拖放许多 sql 文件并开始针对数据库运行它们。

【讨论】:

【参考方案5】:

您可以为 SMSS 使用Batch Compiler 插件,它可以让您一次运行多个脚本、创建 SQLCMD 脚本或将它们合并到一个 *.sql 文件中。

【讨论】:

【参考方案6】:

一些批处理技巧

cd %~dp0 //use this if you use 'for xxx in', it solved most of my problems 

ECHO %USERNAME% started the batch process at %TIME%  >output.txt


for %%f in (*.sql) do (
(
sqlcmd.exe  -S servername -E -d databasename -i %%f >>output.txt
)
echo %errorlevel%
pause

【讨论】:

【参考方案7】:

如果您想通过批处理程序运行 Oracle SQL 文件,那么下面的代码将会很有用。只需复制和更改数据库凭据和数据库名称

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

echo exit | sqlplus scott/tiger@orcl @"c:\users\all.sql"
pause

基本上,您需要将此批处理文件放在您拥有所有 SQL 文件的文件夹中。它将首先获取目录中的所有 sql 文件名,并使用 sql 文件名加载它们的完整路径。然后,它将写入文件all.sql,然后sqlplus 将调用all.sql 来执行您在该目录中的所有sql 文件。

【讨论】:

以上是关于如何使用批处理文件运行多个 SQL 脚本?的主要内容,如果未能解决你的问题,请参考以下文章

在批处理脚本中使用sqlcmd来运行带有输出文件的多个脚本

我有一堆sql文件需要运行 如何批量运行

sql server 中怎样执行bat文件

如何将多个变量从 VBS 传递到批处理脚本?

使用 Flyway 在多个模式上运行 SQL 脚本

在mysql批处理中运行多个sql文件