批量执行SQL脚本

时间:2012-02-06 17:36:46

标签: sql sql-server sql-server-2008 tsql batch-file

我有大约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

2 个答案:

答案 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