我有大约100个需要在SSMS上执行的脚本。如何以批处理方式执行它们而不是逐个执行它们。
我尝试使用它,但它没有用。
@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
答案 0 :(得分:3)
以下运行目录中的所有脚本,将数据输出到.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在输出日志中错过了数据存在问题。
答案 1 :(得分:0)
致所有人:
我发现上面有一些问题,比如Windows 7 Dos不喜欢%% i或%% a所以我删除了'%'字符,然后dos脚本开始工作正常。
下面是我的实际运行版本的脚本,其中“1.A00 * .SQL”脚本运行会截断我的目标表。
“A * .SQL”运行脚本A01_name.sql - >顺序A24_name.sql,非常好
Hank Freeman hfreeman@msn.com
端。
REM“FSA_3.2.2_Runner_for_Insert_Scripts.bat
Rem“Script runner”
Rem“如何使用此脚本”
Rem“从远程桌面会话打开Dos提示”
Rem“运行以下脚本”
Rem“验证数据已插入。”
Rem“Hank Freeman 2014年7月15日hfreeman@msn.com”
Rem“ * begin * ”
C:
cd \
cd C:\ Database_Scripts \ Insert_Scripts
@echo off
如果存在* .log(del * .log)
rem“**从这里开始 * ”
rem“运行Truncate SQL文件”
对于(1.A00 _ * .SQL)中的%i,执行osql -E -i“%i”-m0 -w500 -I -b -r -o“%i.log”2>%i.err。日志
rem“运行A01-A24 SQL文件”
for(i * .SQL)中的%i执行osql -E -i“%i”-m0 -w500 -I -b -r -o“%i.log”2&gt;%i.err.log < / p>
rem删除空的.err文件(即没有错误)
for(* .err.log)中的%a如果%~za == 0 del“%a”
rem“删除日志 - 手动操作”
rem if if exist * .log(del * .log)
Rem“ *结束* ”
@echo on