2012-02-06 196 views
0

我有大约100个需要在SSMS上执行的脚本。我怎样才能将它们作为批处理执行,而不是单独执行它们。在批处理中执行SQL脚本

我试过使用它,但没有奏效。

@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 

回答

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在输出日志中遗漏了数据。

+0

我跑的批处理所以它创造了一个.SQL文件的每个剧本,我看了看文件,它具有如下的值:1> 2> 3> 4> 5>。而且它没有创建任何日志文件或错误日志文件 – peter 2012-02-06 17:45:32

+0

您将看到“.sql”,因为您没有启用在Windows资源管理器中显示文件扩展名的设置。文件名称附加了.log,因此它们最终以“myscript.sql.log”为例。 1> 2> 3>是osql的输出。 – 2012-02-07 09:56:04

0

要所有:

我发现了一些问题与上面,像Windows 7该做什么不喜欢%% i或%%一所以我删除了“%”字符的,然后在DOS脚本启动工作得很好。

下面是脚本的实际运行版本,其中“1.A00 * .SQL”脚本运行截断了我的目标表。

的 “A * .SQL” 运行脚本A01_name.sql - > A24_name.sql顺序,这是相当不错的

汉克·弗里曼[email protected]

结束。

REM “FSA_3.2.2_Runner_for_Insert_Scripts.bat

REM” 脚本运行 “

REM” 如何使用这个脚本”

REM “从一个远程桌面会话打开DOS提示符”

REM “运行下面的脚本”

REM “验证数据已经被插入。”

REM “汉克·弗里曼2014年7月15日[email protected]

REM “* *开头

C:

CD \

CD C:\ Database_Scripts \ Insert_Scripts

@echo off

if存在* .LOG(德尔* .LOG)

REM “**从这里开始*

REM我在 “运行SQL截断文件” 为%

(1.A00_ *。 SQL)do osql -E -i“%i”-m0 -w500 -I -b -r -o“%i.log”2>%i.err。登录

REM “运行A01-A24 SQL文件”

为%i的(A * .SQL)做OSQL -E -i “%I” -M0 -w500 -I -b -r - ○ “%i.log” 2>%i.err.log

REM删除空.ERR文件(即没有错误)

在%A(* .err.log)办%〜 ZA == 0删除 “%一个”

REM “删除日志 - 手动操作”

REM若存在* .LOG(德尔* .LOG)

REM “*结束*

@echo上