在批处理中执行SQL脚本
我有大约100个脚本需要在SSM上执行。如何将它们作为一个批执行,而不是单独执行 我试过用这个,但没用在批处理中执行SQL脚本,sql,sql-server,sql-server-2008,tsql,batch-file,Sql,Sql Server,Sql Server 2008,Tsql,Batch File,我有大约100个脚本需要在SSM上执行。如何将它们作为一个批执行,而不是单独执行 我试过用这个,但没用 @echo off ECHO %USERNAME% started the batch process at %TIME% >output.txt FOR %%? in ("1.01*.SQL") DO ( sqlcmd.exe -S local -E -d collect -i %%? >>output.txt ) pause 以下操作将运行目录中的所有
@echo off
ECHO %USERNAME% started the batch process at %TIME% >output.txt
FOR %%? in ("1.01*.SQL") DO
(
sqlcmd.exe -S local -E -d collect -i %%? >>output.txt
)
pause
以下操作将运行目录中的所有脚本,将数据输出到.log文件,并将错误输出到.err.log文件:
@echo off
echo "Enter Server"
set /p SERVER=
echo "Enter Database"
set /p DATABASE=
if exist *.log ( del *.log )
rem Process the files
for %%i in (*.sql) do osql -E -S %SERVER% -d %DATABASE% -i"%%i" -m0 -w500 -I -b -r -o"%%i.log" 2>%%i.err.log
rem Remove empty .err files (ie had no errors)
for %%a in (*.err.log) do if %%~za==0 del "%%a"
pause
注意:此版本的早期版本使用了
sqlcmd
,但事实证明,sqlcmd在输出日志中丢失了数据。以下操作将运行目录中的所有脚本,将数据输出到.log文件,并将错误输出到.err.log文件:
@echo off
echo "Enter Server"
set /p SERVER=
echo "Enter Database"
set /p DATABASE=
if exist *.log ( del *.log )
rem Process the files
for %%i in (*.sql) do osql -E -S %SERVER% -d %DATABASE% -i"%%i" -m0 -w500 -I -b -r -o"%%i.log" 2>%%i.err.log
rem Remove empty .err files (ie had no errors)
for %%a in (*.err.log) do if %%~za==0 del "%%a"
pause
注意:早期版本使用的是sqlcmd
,但事实证明,sqlcmd在输出日志中遗漏了数据
对所有人:
我发现上面的一些问题,比如Windows 7 Dos不喜欢%%I或%%a,所以我删除了一个“%”字符,然后Dos脚本开始正常工作
下面是我实际运行的脚本版本,其中“1.A00*.SQL”脚本运行会截断我的目标表
“A*.SQL”按顺序运行脚本A01_name.SQL-->A24_name.SQL,这非常好
汉克·弗里曼hfreeman@msn.com
结束
REM“FSA_3.2.2_Runner_for_Insert_Scripts.bat
Rem“脚本运行程序”
Rem“如何使用此脚本”
Rem“从远程桌面会话打开Dos提示符”
Rem“运行下面的脚本”
Rem“验证数据是否已插入。”
Rem“Hank Freeman 2014年7月15日hfreeman@msn.com"
Rem“*开始*”
c:
光盘\
cd C:\Database\u Scripts\Insert\u Scripts
@回音
如果存在*.log(del*.log)
rem“**从这里开始*
rem“运行截断SQL文件”
对于(1.A00.*.SQL)中的%i,执行osql-E-i“%i”-m0-w500-i-b-r-o“%i.log”2>%i.err.log
rem“运行A01-A24 SQL文件”
对于(A*.SQL)中的%i,执行osql-E-i“%i”-m0-w500-i-b-r-o“%i.log”2>%i.err.log
rem删除空的.err文件(即没有错误)
对于(*.err.log)中的%a,如果%za==0删除“%a”,则执行该操作
rem“移除日志-手动操作”
rem如果存在*.log(del*.log)
Rem“*结束*”
@呼应
对所有人:
我发现上面的一些问题,比如Windows 7 Dos不喜欢%%I或%%a,所以我删除了一个“%”字符,然后Dos脚本开始正常工作
下面是我实际运行的脚本版本,其中“1.A00*.SQL”脚本运行会截断我的目标表
“A*.SQL”按顺序运行脚本A01_name.SQL-->A24_name.SQL,这非常好
汉克·弗里曼hfreeman@msn.com
结束
REM“FSA_3.2.2_Runner_for_Insert_Scripts.bat
Rem“脚本运行程序”
Rem“如何使用此脚本”
Rem“从远程桌面会话打开Dos提示符”
Rem“运行下面的脚本”
Rem“验证数据是否已插入。”
Rem“Hank Freeman 2014年7月15日hfreeman@msn.com"
Rem“*开始*”
c:
光盘\
cd C:\Database\u Scripts\Insert\u Scripts
@回音
如果存在*.log(del*.log)
rem“**从这里开始*
rem“运行截断SQL文件”
对于(1.A00.*.SQL)中的%i,执行osql-E-i“%i”-m0-w500-i-b-r-o“%i.log”2>%i.err.log
rem“运行A01-A24 SQL文件”
对于(A*.SQL)中的%i,执行osql-E-i“%i”-m0-w500-i-b-r-o“%i.log”2>%i.err.log
rem删除空的.err文件(即没有错误)
对于(*.err.log)中的%a,如果%za==0删除“%a”,则执行该操作
rem“移除日志-手动操作”
rem如果存在*.log(del*.log)
Rem“*结束*”
@呼应
我运行了批处理,因此它为每个脚本创建了一个.SQl文件,我查看了该文件,它的值如下:1>2>3>4>5>。而且它没有创建任何日志文件或错误日志文件,您将看到“.sql”,因为您尚未启用在windows资源管理器中显示文件扩展名的设置。文件名后面附加了.log,因此它们最终会被命名为“myscript.sql.log”。1>2>3>是osql的输出。我运行了批处理,因此它为每个脚本创建了一个.SQl文件,我查看了该文件,它的值如下:1>2>3>4>5>。而且它没有创建任何日志文件或错误日志文件,您将看到“.sql”,因为您尚未启用在windows资源管理器中显示文件扩展名的设置。文件名后面附加了.log,因此它们最终会被命名为“myscript.sql.log”。1>2>3>是osql的输出。