ディレクトリ内のすべてのSQLファイルを実行する


117

他の開発者がSQL Server 2005データベースに加えた変更を適用するために実行する必要がある.sqlファイルがいくつかあります。ファイルは、次のパターンに従って名前が付けられます。

0001 - abc.sql
0002 - abcef.sql
0003 - abc.sql
...

それらすべてを一度に実行する方法はありますか?

回答:


143

次のコマンドで.BATファイルを作成します。

for %%G in (*.sql) do sqlcmd /S servername /d databaseName -E -i"%%G"
pause

ユーザー名とパスワードを提供する必要がある場合

for %%G in (*.sql) do sqlcmd /S servername /d databaseName -U username -P 
password -i"%%G"

ユーザー/パスワードを指定する場合、「-E」は不要であることに注意してください

この.BATファイルを.SQLファイルを実行するディレクトリに配置し、.BATファイルをダブルクリックすれば完了です。


2
バッチファイルを実行すると、「ログインに失敗しました。信頼されていないドメインからのログインであり、Windows認証では使用できません。」という認証の問題が発生します。サーバー名やデータベースのようにユーザー名とパスワードを提供する方法はありますか?
Sanjay Maharjan 2015

11
:のようなパスワードのユーザーと-Pのための@SanjayMaharjan使用-U、for %%G in (*.sql) do sqlcmd /S servername /d databaseName -U username -P "password" -i"%%G"
Rickedb

-oを使用して出力を個別のファイルに配置するにはどうすればよいですか?-o temp.txtのように使用すると、このtemp.txtは上書きされます。同じsqlファイル名で出力ファイルを取得したい。
ケビン2017年

@vijeth:いい仕事人 200個のSQLファイルを1つずつ作成することを考えていました。大幅な時間の節約
Uthistran Selvaraj 2017

@Vijethありがとうございます。私は自分のために変更するだけです:REM REM開発環境のみ!! (* .sql)で%% GのREM一時停止を行うsqlcmd / S "192.168.10.139 \ SQLEXPRESS" / d "TESTDEV_DB" -U "atiour" -P "atiour" -i "%% G" pause REM REM All Script REMを正常に実行
atik sarker '14 / 07/14

71

FORを使用します。コマンドプロンプトから:

c:\>for %f in (*.sql) do sqlcmd /S <servername> /d <dbname> /E /i "%f"

2
スペースを含むスクリプトで機能するように、最後の "%f"の前後に引用符を追加する必要がありました
Steve Wright

バッチファイルで機能するバージョンについては、この回答を参照してください。
Ian Kemp

また、他のパラメーター(たとえば、引用符で囲まれた識別子を有効にする/ I)を追加する必要がありました
Pavel K

私はこれが好きです-しかし、結果をファイルに出力させる方法はありますか?だから私は簡単に例外を見ることができますか?136個の.sqlファイルでこのコマンドを試したところ、ほとんどのファイルが表示されなくなりました
Rich

2
@Rich出力をファイルにリダイレクトするには、次のコマンドを使用します。for %f in (*.sql) do sqlcmd /S <servername> /d <dbname> /E /i "%f" >> sql.log 2>&1) 出力のリダイレクトの詳細については、こちらをご覧ください
danijelk

26
  1. SQL Management Studioで新しいクエリを開き、すべてのファイルを次のように入力します

    :r c:\Scripts\script1.sql
    :r c:\Scripts\script2.sql
    :r c:\Scripts\script3.sql
  2. SQL Management Studioの[クエリ]メニューに移動し、SQLCMDモードが有効になっていることを確認します
  3. SQLCMDモードをクリックします。ファイルは以下のように灰色で選択されます

    :r c:\Scripts\script1.sql
    :r c:\Scripts\script2.sql
    :r c:\Scripts\script3.sql
  4. 今すぐ実行

3
何百ものファイルがある場合、これは本当に退屈です。
devlin carnate 2017年

1
@devlincarnate:おそらく、ステップ1を自動化する方法を考え出すことができます。たとえば、「dir / B * .sql> list.txt」のようにして、そのlist.txtファイルを少しマッサージします。
ジェフ・ロー

Windowsの新しいバージョンの@devlincarnateでは、Shiftキーを押しながらファイルを右クリックし、[パスとしてコピー]を選択できます。そこから、CTRL + VでSSMSウィンドウに移動します。複数のファイルでも動作します。エクスプローラーで2つ以上のファイルを選択し、強調表示されたファイルのいずれかを右クリックして、[パスとしてコピー]を選択します。SSMSで手順を繰り返します。ファイルパスは二重引用符で囲まれています。検索/置換を使用してSSMSで削除することも、しないこともできます。
Dave Mason

21

Management Studioで[クエリ]> [SQLCMDモード]オプションをクリックして、SQLCMDが有効になっていることを確認します。

  1. script1.sql,script2.sql,script3.sql,script4.sqlフォルダに4つの.sqlファイル()があるとしますc:\scripts

  2. 以下を使用して、メインスクリプトファイル(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自体に保存します。

  3. ExecuteScripts.bat次の名前のバッチファイルを作成します。

    SQLCMD -E -d<YourDatabaseName> -ic:\Scripts\Main.sql
    PAUSE

    <YourDatabaseName>スクリプトを実行するデータベースに置き換えることを忘れないでください。たとえば、データベースが「従業員」の場合、コマンドは次のようになります。

    SQLCMD -E -dEmployee -ic:\Scripts\Main.sql
    PAUSE
  4. バッチファイルをダブルクリックして実行します。


回答を編集しました。また、指定したパスにスクリプトファイルが存在することを確認する必要があります。
Ashish Gupta

このアプローチの良い点は、エラーが検出され、その後、次のスクリプトの実行を停止することです:) -b例と同様:SQLCMD -b -i "file 1.sql","file 2.sql"
Jaider

このアプローチの悪い点は、実行するすべてのSQLファイルのリストを維持する必要があることです。
フランシスコダンコニア2017年

10

ApexSQL Propagateを使用できます。複数のデータベースで複数のスクリプトを実行する無料のツールです。必要な数のスクリプトを選択して、1つまたは複数のデータベース(複数のサーバーでも)に対して実行できます。スクリプトリストを作成して保存し、作成した順序で同じスクリプトを実行するたびにそのリストを選択するだけです(複数のスクリプトリストを追加することもできます)。

スクリプトを選択

スクリプトとデータベースを選択すると、メインウィンドウに表示され、[実行]ボタンをクリックするだけで、選択したデータベースですべてのスクリプトが指定した順序で実行されます。

スクリプトの実行


8

一般的なクエリ

以下の行をbatch.batという名前でメモ帳に保存し、 すべてのスクリプトファイルがあるフォルダー内に配置します。

 for %%G in (*.sql) do sqlcmd /S servername /d databasename  -i"%%G"
    pause

(* .sql)の%% Gの場合、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)の%% Gの場合、sqlcmd / S NE8148server / d EMPLYEEDB -U Scott -P tiger -i "%% G" pause

スクリプトファイルが存在するフォルダー内にbatファイルを作成した後、batファイルをクリックするだけでスクリプトが実行されます


5

私が書いたオープンソースユーティリティドラッグすることができますし、多くのSQLファイルをドロップし、データベースに対してそれらの実行を開始C#での。

ユーティリティには次の機能があります。

  • ドラッグアンドドロップスクリプトファイル
  • スクリプトファイルのディレクトリを実行する
  • 実行中のSQLスクリプト出力メッセージ
  • 緑色または赤色(実行中は黄色)の色のスクリプトが成功または失敗
  • エラー時に停止オプション
  • エラー時にスクリプトを開くオプション
  • スクリプトごとにかかった時間でレポートを実行する
  • 合計継続時間
  • テストDB接続
  • 非同期
  • .Net 4&SQL 2008でテスト済み
  • 単一のexeファイル
  • いつでも接続を強制終了

4

私が見つけた最も簡単な方法は、次の手順を含みました(唯一の要件は、Win7 +にあることです):

  • エクスプローラでフォルダを開きます
  • すべてのスクリプトファイルを選択
  • Shiftキーを押します
  • 選択を右クリックし、「パスとしてコピー」を選択します
  • SQL Server Management Studioに移動します
  • 新しいクエリを作成する
  • クエリメニュー、「SQLCMDモード」
  • リストを貼り付け、次にCtrl + H、 '"C:\'(またはドライブ文字)を ':r" C:'に置き換えます(つまり、行の前に ':r'を付けます)。
  • クエリを実行する

長く聞こえるかもしれませんが、実際には非常に高速です(最小ステップでも説明したように長く聞こえます)。



1
@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、パスワードを入力します。


この質問は、MySQLではなくMSSQLに関連しています。
Shawn

0

他のすべてを呼び出す単一のスクリプトを作成できます。

以下をバッチファイルに入れます。

@echo off
echo.>"%~dp0all.sql"
for %%i in ("%~dp0"*.sql) do echo @"%%~fi" >> "%~dp0all.sql"

そのバッチファイルを実行すると、バッチファイルとall.sql同じディレクトリに名前が付けられた新しいスクリプトが作成されます。.sqlバッチファイルが置かれているのと同じディレクトリで、拡張子が付いたすべてのファイルを検索します。

次に、を使用してすべてのスクリプトを実行できますsqlplus user/pwd @all.sql(またはsqlplusall.sqlスクリプトを作成した後に呼び出すようにバッチファイルを拡張します)。


0

同じディレクトリですべてのSQLfileを実行するには、次のコマンドを使用します。

ls | awk '{print "@"$0}' > all.sql

このコマンドは、ディレクトリ内のすべてのSQLファイルの名前に「@」を付加した単一のSQLファイルを作成します。

all.sqlが作成された後、all.sqlSQLPlusで実行するだけで、内のすべてのSQLファイルが実行されますall.sql


0

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ファイルを置き、実行します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.