1. ホーム
  2. データベース
  3. エムエスエル

Windows環境でのSqlファイルの一括実行

2022-01-05 16:59:44

シナリオ フォルダ内の全sqlファイルをファイル名の正順で一括実行し、ログを出力する。
向いている人 実装技術者

I. 使用方法

1. batファイルを用意する。
1.1、ExecSql.bat(実行スクリプト)(ファイルエンコーディング。ANSI、このエンコーディングは後述のutf8ともgb2312とも異なる、メモ帳での編集はデフォルトでこのエンコーディングなので、メモ帳++を再生する必要はない)

@ECHO OFF

SET dbhost=127.0.0.1
SET dbuser=sa
SET dbpasswd=sa
SET dbName=Application

REM The following contents are not recommended to be modified
REM The path to execute the script, here is the current path
SET sqlpath=%~dp0
REM Log file name
SET temp=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.log
SET logFileName=%sqlpath%%temp: =0%

::Execute sql script
echo Start sql script execution, all logs are recorded in %logFileName%
for /r %%i in (*.sql) do ( echo %%i is executed & echo ----- %%i log start ----- >> %logFileName% & sqlcmd -S %dbhost% -U %dbuser% -P %dbpasswd% -d % dbName% -i %%i -k -b -m 10 >> %logFileName% & echo ----- %%i log end ----- >> %logFileName% & @echo. >> %logFileName%)

ECHO Done!
PAUSE


1.2. ShowOrder.bat (どのスクリプトがどの順番で実行されるか確認する) (ファイルエンコーディング: ANSI)
@ECHO OFF
for /r %%i in (*.sql) do ( echo %%i )

ECHO done!
PAUSE


2、ExecSql.batをターゲットのルートディレクトリにコピーし、ファイルのディレクトリ構造(フォルダパスできれば中国語なし)、図のように、私はこのフォルダの下にすべてのSQLファイルを実行する必要があると仮定します。

3、[オプション]ソート、SQLファイルの要件の実行順序は、ファイル名を変更する必要がある場合は、上記のように、ファイル名の正の順序の実行順序は、それは&quotを使用することをお勧めします;01."などファイル名のプレフィックスとして

ShowOrder.batをターゲットのルートディレクトリにコピーし、ダブルクリックして実行し、実行順序が予想通りであるかどうかを確認します。

4. [重要]エンコーディングの変換は、一般的に.sqlファイルのエンコーディングはutf8、もし.sqlファイルの内容は、中国語(コメントはカウントされません)を使用して、あなたはGB2312にファイルのエンコーディングを変更する必要があります、それ以外の場合は間違ったSQL文が実行されます。

例えば、01.XXX.sqlのエンコーディングはutf8ですが、データベースに挿入されるデータは文字化けしています。

次の4.1、4.2のいずれかを実行します。

4.1. エンコードを変更するには、メモ帳で.NET Frameworkを開いてください。 sqlファイルを開き、ctrl+A(すべて選択)、ctrl+C(コピー)、メモ帳 "エンコード" -> "エンコード文字セット" -> Chinese"-> "GB2312" をクリックすると回復できない警告が出て、はい、クリック、ctrl+A(すべて選択)、 ctrl+V(ペースト)、最後に保存する。

4.2. ツールを使用する ( エンコーディングコンバーター ) バッチ修正:ツールをダウンロードし、実行するためにそれを解凍し、次の設定に示すように、BatchConvertor.exeをダブルクリックします。

変換が完了した後、再度実行し、正しい中国語を取得します

5は、バットファイルを変更するには、メモ帳++または他のエディタを使用して、ExecSql.batでデータベース接続関連の情報を開き、唯一のデータベースへの接続に関連する4つの変数を変更することができます、他の変更する必要はありません、変更後に保存します。

6. 6. bat ファイルをダブルクリックすると、次のような出力が得られます。

7. ログを見て、それぞれの.logファイルをチェックします。メッセージがないのは良いニュースです。正しいスクリプトを実行した.logファイルは通常次のようなものです。

エラーもフィードバックされます。例えば、スクリプトが再度実行されると、エラーが報告されます。

特記事項:このbatファイルは、カレントフォルダ内のすべての.sqlファイルをチェックして実行するので、batを再度実行する際には、再度実行する必要のないいくつかの.sqlファイルを削除する必要があります。

II. 原則

sqlcmdとosqlコマンドはどちらもSQLファイルを実行することができ、ほとんど同じパラメータを持っています。ログ出力がよりきれいで、Microsoftが将来的にSqlServerからosql(もはやサポートされていない)を削除するつもりであるため、ここではsqlcmdが選ばれています。どちらのコマンドも cmd で XXX/? を使ってヘルプを照会することができます。

sqlcmdの公式ドキュメントです。 https://docs.microsoft.com/zh-cn/sql/tools/sqlcmd-utility?view=sql-server-ver15

osql の公式ドキュメントです。 https://docs.microsoft.com/zh-cn/sql/tools/osql-utility?view=sql-server-ver15

今回の記事は、Windows環境でのSqlファイルの一括実行についてです。Windows環境でのSqlファイルの一括実行については、Script Houseの過去記事を検索していただくか、引き続き以下の関連記事をご覧ください。