バッチでSQLスクリプトを実行する

私はSSMS上で実行する必要がある約100のスクリプトを持っています。どうすれば個々に実行するのではなく、バッチとして実行できますか?

私はこれを使ってみましたが、うまくいきませんでした。

@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

2 答え

以下は、ディレクトリ内のすべてのスクリプトを実行し、.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に出力ログのデータが欠落しているという問題がありました。

3
追加された
バッチを実行して各スクリプトの.SQlファイルを作成したので、ファイルを調べました。値は1> 2> 3> 4> 5>のようになります。また、ログファイルやエラーログファイルも作成されませんでした
追加された 著者 peter,
Windowsエクスプローラでファイル拡張子を表示できるように設定されていないため、 ".sql"が表示されます。ファイル名には.logが付加されているので、例えば "myscript.sql.log"となります。 1> 2> 3>はosqlの出力です。
追加された 著者 Jon Egerton,

To all:

I found some issues with the above, Like Windows 7 Dos did not like the %%i or %%a so I removed an '%' character an then the dos script started to work just fine.

Below is my actual running version of the script where the "1.A00*.SQL" script run truncates my target tables.

The "A*.SQL" run script A01_name.sql --> A24_name.sql sequentially, which is quite nice

Hank Freeman [email protected]

end.

REM " FSA_3.2.2_Runner_for_Insert_Scripts.bat

Rem " Script runner "

Rem " How to use this script"

Rem " From a Remote Desktop session Open a Dos Prompt"

Rem " Run the below script"

Rem " Validate the data has been inserted."

Rem " Hank Freeman July 15th 2014 [email protected]"

Rem " * begin *"

c:

cd \

cd C:\Database_Scripts\Insert_Scripts

@echo off

if exist *.log ( del *.log )

rem "** Starting here *"

rem "run the Truncate SQL file"

for %i in (1.A00_*.SQL) do osql -E -i"%i" -m0 -w500 -I -b -r -o"%i.log" 2>%i.err.log

rem "run the A01-A24 SQL file"

for %i in (A*.SQL) do osql -E -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"

rem "Remove the logs - Manual operation"

rem if exist *.log ( del *.log )

Rem " * end *"

@echo on

0
追加された