他の開発者が行った変更を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
この.BATファイルを.SQLファイルを実行するディレクトリに配置し、.BATファイルをダブルクリックして完了です!
FOR を使用します。コマンドプロンプトから:
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
SQLCMDモードをクリックします。ファイルは以下のようにグレーで選択されます
:r c:\Scripts\script1.sql
:r c:\Scripts\script2.sql
:r c:\Scripts\script3.sql
Management Studioで[クエリ]> [SQLCMDモード]オプションをクリックして、SQLCMDが有効になっていることを確認します。
フォルダーscript1.sql,script2.sql,script3.sql,script4.sql
に4つの.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
Main.sqlをc:\ scripts自体に保存します。
次を使用してExecuteScripts.bat
という名前のバッチファイルを作成します。
SQLCMD -E -d<YourDatabaseName> -ic:\Scripts\Main.sql
PAUSE
<YourDatabaseName>
を、スクリプトを実行するデータベースに置き換えることを忘れないでください。たとえば、データベースが「従業員」の場合、コマンドは次のようになります。
SQLCMD -E -dEmployee -ic:\Scripts\Main.sql
PAUSE
同じファイルをダブルクリックして、バッチファイルを実行します。
ApexSQL Propagate を使用できます。複数のデータベースで複数のスクリプトを実行する無料のツールです。必要な数のスクリプトを選択して、1つまたは複数のデータベース(複数のサーバーを含む)に対して実行できます。スクリプトリストを作成して保存し、作成した順序で同じスクリプトを実行するたびにそのリストを選択するだけです(複数のスクリプトリストを追加することもできます)。
スクリプトとデータベースが選択されると、それらはメインウィンドウに表示されます。実行する必要があるのは、「実行」ボタンをクリックするだけです。すべてのスクリプトは、選択されたデータベースで指定された順序で実行されます:
一般的なクエリ
batch.batという名前でメモ帳に次の行を保存し、すべてのスクリプトファイルがあるフォルダー内に配置します。
for %%G in (*.sql) do sqlcmd /S servername /d databasename -i"%%G"
pause
例
(* .sql)の%% Gの場合sqlcmd/S NFGDDD23432/d EMPLYEEDB -i "%% G" pause
ログインが失敗した場合は、sernameおよびpasswordで以下のコードを使用してください
for %%G in (*.sql) do sqlcmd /S SERVERNAME /d DBNAME -U USERNAME -P PASSWORD -i"%%G"
pause
(* .sql)の%% Gに対して、sqlcmd/S NE8148server/d EMPLYEEDB -U Scott -P tiger -i "%% G" pause
スクリプトファイルがあるフォルダー内にbatファイルを作成したら、スクリプトが実行されるbatファイルをクリックするだけです
オープンソースユーティリティ をC#で記述しました。これにより、多くのSQLファイルをドラッグアンドドロップし、データベースに対して実行を開始できます。
このユーティリティには次の機能があります。
私が知っていることは、osqlまたはsqlcmdコマンドを使用して複数のsqlファイルを実行できることです。欠点は、両方のコマンドのスクリプトを作成する必要があることです。
SQLCMDを使用して複数のSQL Serverスクリプトを実行する
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サーバーで実行されたクエリ内のすべてのSQLファイルのdドライブabcフォルダー。
ステップ3:IP、ユーザーID、パスワードを入力します。
Interactive 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ファイルを入れて実行します。
同じディレクトリですべてのSQLfileを実行するには、次のコマンドを使用します。
ls | awk '{print "@"$0}' > all.sql
このコマンドは、ディレクトリ内のすべてのSQLファイルの名前に「@」を追加した単一のSQLファイルを作成します。
all.sql
が作成された後、SQLPlusでall.sql
を実行するだけで、all.sql
内のすべてのsqlファイルが実行されます。
他のすべてを呼び出す単一のスクリプトを作成できます。
以下をバッチファイルに入れます。
@echo off
echo.>"%~dp0all.sql"
for %%i in ("%~dp0"*.sql) do echo @"%%~fi" >> "%~dp0all.sql"
そのバッチファイルを実行すると、all.sql
という名前の新しいスクリプトが、バッチファイルと同じディレクトリに作成されます。バッチファイルが置かれているのと同じディレクトリで、拡張子が.sql
のすべてのファイルを探します。
その後、sqlplus user/pwd @all.sql
を使用してすべてのスクリプトを実行できます(または、all.sql
スクリプトの作成後にsqlplus
を呼び出すようにバッチファイルを拡張します)