[SQL Server] コマンドラインからSQLを実行する方法 | Archive Redo Blog

Archive Redo Blog

DBエンジニアのあれこれ備忘録

SQL Serverにはアプリケーションからドライバを介してアクセスするのが普通ですが、isqlユーティリティを使えばコマンドラインからアクセスすることも可能です。
isqlの使い方(基本編)

まず、isqlでSQL Serverに接続する基本的な方法は、こんな感じです。

isql -Usa -Psa -SSQLSERVER1 -dTEST_DB"

  -U:ユーザーのログインID
  -P:ユーザーのパスワード
  -S:SQL Serverインスタンス名
  -d:SQL Serverデータベース名


これを実行するとisqlのプロンプトが現れ、対話形式でSQLの実行ができます。


終了するときはexitと入力すればOKです。


ここではSQL Server認証を使用していますが、Windows認証を使用することもできます。


ですが、対話形式でSQLを実行するのなら、クエリアナライザという使いやすいGUIがあります。


わざわざisqlをコマンドラインから実行する必要はありません。


isqlはあらかじめ実行するSQLが決まっていて、それを自動的に実行するような用途で使うことがほとんどでしょう。


特にジョブ管理ソフトなどから定期的にバッチ処理を実行する際に利用したり、データベースのセットアップやメンテナンスなどを自動実行したりといった、データベース管理的な作業でよく使います。


例えば、データベースを削除する場合、こんな感じで実行します。


(いきなりかなり危険な作業ですが^^ゞ)

isql -Usa -Psa -SSQLSERVER1 -dmaster -Q"DROP DATABASE TEST_DB"

  -U:ユーザーのログインID
  -P:ユーザーのパスワード
  -S:SQL Serverインスタンス名
  -d:SQL Serverデータベース名
  -Q:実行するクエリー

複数のSQLを連続実行したい場合は、上記のような形でなく、SQLスクリプトファイルを指定して実行することもできます。

isql -Usa -Psa -SSQLSERVER1 -dmaster -i"input.sql"

  -i:実行するSQLスクリプトファイル
実行したSQLの結果をファイルに出力することもできます。

isql -Usa -Psa -SSQLSERVER1 -dmaster -Q"SELECT * FROM sales" -o"output.txt"

  -o:出力ファイル


入力ファイル、出力ファイルの指定にはまたはDOSのリダイレクトも利用できます。


-oオプションでは既に出力ファイルが存在する場合には上書きされてしまいますので、既存のファイルに追加出力したい場合などに使えます。

isql -Usa -Psa -SSQLSERVER1 -dmaster -Q"SELECT * FROM sales" >> output.txt

基本的にはこんな感じで利用します。

isqlの使い方(応用編)

isqlには上記のような基本的な使い方以外にも、オプションや拡張機能がたくさんあるので使い道は幅広い。

例えば、環境変数の利用などが代表的な応用方法でしょうか。

isql -U%USER_NAME& -P%PASSWORD% -S%SERVER_NAME -d%DATABASE_NAME% -i"%INPUT_FILE%"


あとは、戻り値の利用なんかも便利です。


バッチファイルの中でisqlを実行した時にエラーが発生したとします。


そのエラーをバッチファイルで拾ってハンドリングしたい場合は、-bオプションを指定します。


-bオプションを指定するとSQL Serverのエラーの重大度に応じてDOSのERRORLEVELに値が返ります。

isql -Usa -Psa -SSQLSERVER1 -dmaster -i"input.sql" -b
IF ERRORLEVEL 1 GOTO DATABASE_ERROR
  .
  .
  .
:DATABASE_ERROR
ECHO ERROR:データベースエラーが発生しました。

また、EXIT()を使うと、SQLの実行結果をDOSのERROR_LEVELに返すこともできます。

isql -Usa -Psa -SSQLSERVER1 -dmaster -Q"EXIT(SELECT COUNT(*) FROM sales)"
ECHO 検索結果:ERRORLEVEL件


これら以外にもまだ工夫次第でまだまだ応用できますが、きりがないのでこのくらいにとどめておきます。



最後にセキュリティに関して一言。


上記のすべての例ではSQL Server認証を使用していますが、ログインID、パスワードを平文で直接埋め込むことはセキュリティ上好ましくないでしょう。


できれば環境変数を利用して、isqlコマンドとログインID、パスワードを分離する、もしくはWindows認証を使用するなどしたほうがよいでしょう。

isqlの詳細についてはSQL Server Books Onlineを参照のこと。