如何使用批处理文件运行多个 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 脚本?的主要内容,如果未能解决你的问题,请参考以下文章