すべてのSQLファイルをディレクトリ内で実行します
-
24-09-2019 - |
質問
SQL Server 2005データベースで他の開発者が行った変更を適用するために実行する必要がある.SQLファイルがいくつかあります。ファイルは、次のパターンに従って命名されます。
0001 - abc.sql
0002 - abcef.sql
0003 - abc.sql
...
それらすべてを一度に実行する方法はありますか?
解決
次のコマンドで.batファイルを作成します。
for %%G in (*.sql) do sqlcmd /S servername /d databaseName -E -i"%%G"
pause
.sqlファイルを実行する必要があるディレクトリにこの.batファイルを配置し、.batファイルをダブルクリックすると完了です!
他のヒント
使用する 為に. 。コマンドプロンプトから:
c:\>for %f in (*.sql) do sqlcmd /S <servername> /d <dbname> /E /i "%f"
SQL Management Studioで新しいクエリを開き、以下のようにすべてのファイルを入力します
:r c:\Scripts\script1.sql :r c:\Scripts\script2.sql :r c:\Scripts\script3.sql
- SQL Management Studioのクエリメニューに移動し、SQLCMDモードが有効になっていることを確認してください
SQLCMDモードをクリックします。ファイルは、以下のように灰色で選択されます
:r c:\Scripts\script1.sql :r c:\Scripts\script2.sql :r c:\Scripts\script3.sql
- 今実行します
Management Studioのクエリ> SQLCMDモードオプションをクリックして、SQLCMDを有効にしていることを確認してください。
4つの.sqlファイルがあるとします(
script1.sql,script2.sql,script3.sql,script4.sql
)フォルダー内c:\scripts
.次のようにメインスクリプトファイル(main.sql)を作成します。
:r c:\Scripts\script1.sql :r c:\Scripts\script2.sql :r c:\Scripts\script3.sql :r c:\Scripts\script4.sql
c:スクリプト自体にmain.sqlを保存します。
名前のバッチファイルを作成します
ExecuteScripts.bat
以下:SQLCMD -E -d<YourDatabaseName> -ic:\Scripts\Main.sql PAUSE
交換することを忘れないでください
<YourDatabaseName>
データベースを使用すると、スクリプトを実行する必要があります。たとえば、データベースが「従業員」の場合、コマンドは次のとおりです。SQLCMD -E -dEmployee -ic:\Scripts\Main.sql PAUSE
同じものをダブルクリックしてバッチファイルを実行します。
使用できます apexsql伝播. 。複数のデータベースで複数のスクリプトを実行する無料のツールです。必要な数のスクリプトを選択して、1つまたは複数のデータベース(複数のサーバー)に対して実行することができます。スクリプトリストを作成して保存してから、作成した順序で同じスクリプトを実行するたびにそのリストを選択するだけです(複数のスクリプトリストも追加できます):
スクリプトとデータベースが選択されると、メインウィンドウに表示され、「実行」ボタンをクリックするだけで、すべてのスクリプトが選択された順序で選択されたデータベースで実行されます。
一般的なクエリ
下の行を名前でメモ帳に保存します batch.bat すべてのスクリプトファイルがあるフォルダー内に配置します
for %%G in (*.sql) do sqlcmd /S servername /d databasename -i"%%G"
pause
例
(*.sql)in(*.sql)do sqlcmd /sの場合 NFGDDD23432 /d emplyeedB -i "%% g"一時停止
ログインが失敗した場合は、以下のコードを使用してください ユーザー名 と パスワード
for %%G in (*.sql) do sqlcmd /S SERVERNAME /d DBNAME -U USERNAME -P PASSWORD -i"%%G"
pause
(*.sql)in(*.sql)do sqlcmd /sの場合 NE8148Server /d emplyeedB -u スコット -P 虎 -i "%% g"一時停止
スクリプトファイルがあるフォルダー内にバットファイルを作成したら、スクリプトが実行されるバットファイルをクリックするだけです
私が書いた オープンソースユーティリティ C#では、多くのSQLファイルをドラッグアンドドロップし、データベースに対して実行を開始できます。
ユーティリティには次の機能があります。
- スクリプトファイルをドラッグアンドドロップします
- スクリプトファイルのディレクトリを実行します
- SQLスクリプトは、実行中にメッセージを表示します
- 緑と赤の色の合格または失敗したスクリプト(ランニング用の黄色)
- エラーオプションで停止します
- エラーオプションでスクリプトを開く
- 各スクリプトの時間を取得してレポートを実行します
- 合計期間
- DB接続をテストします
- Asynchronus
- .NET 4&SQL 2008でテスト
- 単一のexeファイル
- いつでもつながりを殺します
私が知っていることは、OSQLまたはSQLCMDコマンドを使用して複数のSQLファイルを実行できます。欠点は、両方のコマンドのスクリプトを作成する必要があることです。
SQLCMDを使用して、複数のSQLサーバースクリプトを実行します
OSQL(これはSQL Server 2000用です)
http://msdn.microsoft.com/en-us/library/aa213087(v=sql.80).aspx
@echo off
cd C:\Program Files (x86)\MySQL\MySQL Workbench 6.0 CE
for %%a in (D:\abc\*.sql) do (
echo %%a
mysql --host=ip --port=3306 --user=uid--password=ped < %%a
)
ステップ1:上記の線がメモパッドにコピーしてコウモリとして保存します。
ステップ2:SQL Serverで実行されたクエリのすべてのSQLファイルのDドライブABCフォルダー。
ステップ3:IP、ユーザーID、パスワードを指定します。
他のすべてを呼び出す単一のスクリプトを作成できます。
以下をバッチファイルに入れます。
@echo off
echo.>"%~dp0all.sql"
for %%i in ("%~dp0"*.sql) do echo @"%%~fi" >> "%~dp0all.sql"
そのバッチファイルを実行すると、名前が付けられた新しいスクリプトが作成されます all.sql
バッチファイルが配置されている同じディレクトリ内。拡張機能を備えたすべてのファイルを探します .sql
バッチファイルが配置されている同じディレクトリ内。
その後、すべてのスクリプトを使用して実行できます sqlplus user/pwd @all.sql
(または、バッチファイルを拡張して呼び出します sqlplus
作成後 all.sql
脚本)
同じディレクトリですべてのsqlfileを実行するには、次のコマンドを使用します。
ls | awk '{print "@"$0}' > all.sql
このコマンドは、ディレクトリ内のすべてのSQLファイルの名前が「@」で追加された単一のSQLファイルを作成します。
後に all.sql
作成された単純に実行されます all.sql
sqlplusを使用すると、すべてのSQLファイルが実行されます all.sql
.
インタラクティブSQLを使用できる場合:
1-このコードで.batファイルを作成します。
@ECHO OFF ECHO
for %%G in (*.sql) do dbisql -c "uid=dba;pwd=XXXXXXXX;ServerName=INSERT-DB-NAME-HERE" %%G
pause
2- PWDとServernameを変更します。
3- .sqlファイルを含む.batファイルをフォルダーに入れて実行します。