web-dev-qa-db-ja.com

バッチファイルを使用して一連のSQLクエリを実行しますか?

SQL Serverデータベースを使用しています。これらのSQLクエリがあります。

Delete from TableA;
Delete from TableB;
Delete from TableC;
Delete from TableD;
Delete from TableE;

バッチファイルを使用してこれらのスクリプトを実行することは可能ですか?データベースはリモートデータベースです。

ありがとう!

29
user755806

コマンドを.SQLファイルに保存します。例:ClearTables.sql、たとえばC:\tempフォルダーに保存します。

内容C:\Temp\ClearTables.sql

Delete from TableA;
Delete from TableB;
Delete from TableC;
Delete from TableD;
Delete from TableE;

次にsqlcmdを使用して、次のように実行します。データベースはリモートであると言ったので、次の構文を使用します(サーバーおよびデータベースインスタンス名の更新後)。

sqlcmd -S <ComputerName>\<InstanceName> -i C:\Temp\ClearTables.sql

たとえば、リモートコンピューター名がSQLSVRBOSTON1で、データベースインスタンス名がMyDB1の場合、コマンドは次のようになります。

sqlcmd -E -S SQLSVRBOSTON1\MyDB1 -i C:\Temp\ClearTables.sql

また、-Eはデフォルト認証を指定することに注意してください。接続するユーザー名とパスワードがある場合は、-Uおよび-Pスイッチを使用します。

CMDコマンドウィンドウを開いて、これらすべてを実行します。

バッチファイルの使用

バッチファイルに保存し、ダブルクリックして実行する場合は、次のようにします。

ClearTables.batを作成して保存します。

echo off
sqlcmd -E -S SQLSVRBOSTON1\MyDB1 -i C:\Temp\ClearTables.sql
set /p delExit=Press the ENTER key to exit...:

次に、それをダブルクリックして実行します。コマンドを実行し、キーを押して終了するまで待機するため、コマンドの出力を確認できます。

54
Shiva

SQL Serverに付属のSQLCMDコマンドラインツールをご覧ください。 http://technet.Microsoft.com/en-us/library/ms162773.aspx

5
BateTech

SQLCMDユーティリティを使用します。

http://technet.Microsoft.com/en-us/library/ms162773.aspx

同じバッチでデータベースサーバーAからサーバーBにスイングできるようにする接続ステートメントがあります。

:connect server_name [\ instance_name] [-l timeout] [-U user_name [-P password]] SQL Serverのインスタンスに接続します。また、現在の接続を閉じます。

一方、PowerShellに精通している場合は、プログラムで同じことができます。

http://technet.Microsoft.com/en-us/library/cc281954(v = sql.105).aspx

2
CRAFTY DBA

違う方法:

  1. SQL Serverエージェントの使用(ローカルインスタンスの場合)
    タイプが「T-SQL」である新しいステップを使用して、SQL Serverエージェントでジョブをスケジュールしてから、ジョブを実行します。

  2. SQLCMDを使用する
    SQLCMDを使用するには、 http://technet.Microsoft.com/en-us/library/ms162773.aspx を参照してください。

  3. SQLPSを使用する
    SQLPSを使用するには、 http://technet.Microsoft.com/en-us/library/cc280450.aspx を参照してください。

0
Punter015