osql ユーティリティ

osql ユーティリティを使用すると、Transact-SQL ステートメント、システム プロシージャ、およびスクリプト ファイルを入力できます。また、このユーティリティは ODBC を使用してサーバーと通信します。

ms162806.note(ja-jp,SQL.90).gif重要 :
この機能は、将来のバージョンの Microsoft SQL Server では削除される予定です。新しい開発作業では、この機能の使用を避け、現在この機能を使用しているアプリケーションは修正するようにしてください。代わりに、sqlcmd を使用します。詳細については、「sqlcmd ユーティリティ」を参照してください。

構文

osql
[-?] |
[-L] |
[
  {
     {-Ulogin_id [-Ppassword]} | –E }
     [-Sserver_name[\instance_name]] [-Hwksta_name] [-ddb_name]
     [-ltime_out] [-ttime_out] [-hheaders]
     [-scol_separator] [-wcolumn_width] [-apacket_size]
     [-e] [-I] [-D data_source_name]
     [-ccmd_end] [-q "query"] [-Q"query"]
     [-n] [-merror_level] [-r {0 | 1}]
     [-iinput_file] [-ooutput_file] [-p]
     [-b] [-u] [-R] [-O]
]

引数

  • -?
    osql のスイッチに関する構文の概要を表示します。
  • -L
    ローカルに構成されたサーバーと、ネットワーク上でブロードキャストしているサーバー名の一覧を表示します。

    ms162806.note(ja-jp,SQL.90).gifメモ :
    ネットワーク上のブロードキャストの特性によっては、sqlcmd は、一部のサーバーからタイムリーな応答を受信できない場合があります。そのため、返されるサーバーのリストは、このオプションの実行ごとに異なる可能性があります。
  • -Ulogin_id
    ユーザー ログイン ID を指定します。ログイン ID では大文字と小文字は区別されます。
  • -Ppassword
    ユーザー ログインのパスワードを指定します。-P オプションを使用しない場合は、パスワードの入力画面が表示されます。-P オプションをコマンド プロンプトの最後にパスワードなしで使用すると、osql ではデフォルトのパスワード (NULL) が使用されます。

    ms162806.security(ja-jp,SQL.90).gifセキュリティ メモ :
    空白のパスワードは使用しないでください。また複雑なパスワードを使用してください。詳細については、「強力なパスワード」を参照してください。

    パスワードでは大文字と小文字が区別されます。

    OSQLPASSWORD 環境変数を使用して、現在のセッションの既定のパスワードを設定できます。したがって、バッチ ファイルにパスワードを書き込む必要がありません。

    -P オプションを使用してパスワードを指定しないと、osql では最初に OSQLPASSWORD 変数が確認されます。値が設定されていないと、osql では既定のパスワード (NULL) が使用されます。次の例では、コマンド プロンプトで OSQLPASSWORD 変数を設定してから osql ユーティリティにアクセスします。

    C:\>SET OSQLPASSWORD=abracadabra
    C:\>osql 
    
    ms162806.security(ja-jp,SQL.90).gifセキュリティ メモ :
    パスワードをマスクする場合は、-P オプションを -U オプションと共には指定しないでください。osql を -U オプションおよび他のスイッチと共に指定した後 (-P は指定しない)、Enter キーを押すと、osql によってパスワードが要求されます。この方法を使用すると、入力時にパスワードが確実にマスクされます。
  • -E
    パスワードを要求せずに、信頼関係接続を使用します。
  • -Sserver_name[ **\instance_name]
    接続先となる Microsoft SQL Server のインスタンスを指定します。サーバー上にある SQL Server の既定のインスタンスに接続する場合は、server_name を指定します。サーバー上にある SQL Server の名前付きインスタンスに接続する場合は、server_name
    \**instance_name を指定します。サーバーを指定しない場合、osql は、ローカル コンピュータ上にある SQL Server の既定のインスタンスに接続します。ネットワーク上のリモート コンピュータから osql を実行するときは、このオプションが必要です。
  • -Hwksta_name
    ワークステーション名を指定します。ワークステーション名は sysprocesses.hostname に格納され、sp_who により表示されます。このオプションが指定されていない場合は、現在のコンピュータ名であると見なされます。
  • -ddb_name
    osql の起動時に、USE db_name ステートメントを実行します。
  • -ltime_out
    osql がログイン タイムアウトになる時間を秒単位で指定します。osql でのログインに関する既定のタイムアウトは、8 秒です。
  • -ttime_out
    コマンドの実行待ち時間を秒単位で指定します。time_out 値が指定されない場合は、コマンドのタイムアウトはありません。
  • -hheaders
    列ヘッダーの間に出力する行数を指定します。既定では、各クエリの結果に対して、ヘッダーは 1 つだけ表示されます。ヘッダーを出力しない場合は、-1 を指定します。-1 を使用する場合、パラメータと設定値の間には空白を入れないでください (-h -1 ではなく、-h -1 を使用)。
  • -scol_separator
    列の区切り文字を指定します。既定値は空白文字です。オペレーティング システムで特別な意味を持つ文字 (| ; & < > など) を使用するには、その文字を二重引用符 (") で囲みます。
  • -wcolumn_width
    出力用の画面幅を設定できます。既定値は、80 バイトです。出力行が画面幅の最大値を超えると、複数の行に分けて出力されます。
  • -apacket_size
    サイズの異なるパケットが要求できます。packet_size の有効値は 512 ~ 65,535 です。osql での既定値はサーバーの既定値と同じです。パケット サイズを大きくすると、各 GO コマンドの間に多くの SQL ステートメントが含まれているサイズの大きいスクリプトを実行する場合に、パフォーマンスが向上します。弊社のテストでは、一括コピーが最も速くなる設定値は 8,192 という結果が出ています。大きなパケット サイズを要求することもできますが、要求が認められない場合は、サーバーでの既定値が osql での既定値になります。
  • -e
    入力のエコーを返します。
  • -I
    QUOTED_IDENTIFIER 接続オプションを有効にします。
  • -Ddata_source_name
    Microsoft SQL Server 用の ODBC ドライバを使用して定義された ODBC データ ソースに接続します。osql 接続では、データ ソースで指定されたオプションが使用されます。

    ms162806.note(ja-jp,SQL.90).gifメモ :
    このオプションは、他のドライバ用に定義されたデータ ソースでは機能しません。
  • -ccmd_end
    コマンド ターミネータを指定します。既定では、GO だけが入力されている行があると、コマンドが終了したと見なされ、SQL Server に送られます。コマンド ターミネータをリセットする場合、Transact-SQL の予約語やオペレーティング システムで特別な意味を持つ文字は、先頭に円記号が付いているかどうかに関係なく、使用しないでください。
  • -q "query"
    osql の起動時にクエリを実行しますが、クエリが完了しても osql を終了しません。クエリ ステートメントには GO を含めないでください。バッチ ファイルからクエリを実行する場合は、% 変数 (環境変数 %variable%) も使用できます。次に例を示します。

    SET table=sys.objects
    osql -E -q "select name, object_id from %table%"
    

    クエリは二重引用符で、クエリに埋め込まれたものは単一引用符で囲みます。

  • -Q"query"
    クエリの実行後、直ちに osql を終了します。クエリは二重引用符で、クエリに埋め込まれたものは単一引用符で囲みます。
  • -n
    入力行から行番号とプロンプト記号 (>) を削除します。
  • -m error_level
    エラー メッセージの表示をカスタマイズします。指定した重大度レベル以上のエラーが発生すると、メッセージ番号、状況、エラー レベルが表示されます。指定した重大度レベルより低いレベルのエラーの場合は、何も表示されません。-1 を指定すると、単なる情報メッセージであっても、すべてのヘッダーがメッセージと共に返されます。-1 を使用する場合、パラメータと設定値の間には空白を入れないでください (-m -1 ではなく、-m-1 を使用)。
  • -r { 0| 1}
    メッセージ出力を画面にリダイレクトします (stderr)。パラメータを指定しない場合や、0 を指定した場合は、重大度レベル 11 以上のエラー メッセージだけがリダイレクトされます。1 を指定した場合は、"print" を含むすべてのメッセージ出力がリダイレクトされます。
  • -iinput_file
    SQL ステートメントまたはストアド プロシージャのバッチを含むファイルを指定します。-i の代わりに、未満を示す比較演算子 (<) を使用することもできます。
  • -ooutput_file
    osql からの出力を受信するファイルを指定します。-o の代わりに、より大きいことを示す比較演算子 (>) を使用することもできます。

    input_file が Unicode でなく、-u が指定されていない場合、output_file は OEM 形式で格納されます。input_file が Unicode であるか、または -u が指定されている場合、output_file は Unicode 形式で格納されます。

  • -p
    パフォーマンス統計を出力します。
  • -b
    エラーが発生したときに、osql を終了し、DOS ERRORLEVEL 値を返します。SQL Server のエラー メッセージの重大度が 11 以上の場合は、DOS ERRORLEVEL 変数に返される値は 1 です。それ以外の場合は、値 0 が返されます。Microsoft MS-DOS バッチ ファイルにより、DOS ERRORLEVEL の値をテストすることができ、エラーを適切に処理できます。
  • -u
    input_file の形式に関係なく、output_file を Unicode 形式で格納します。
  • -R
    通貨、日付、および時刻データを文字データに変換するときに、SQL Server ODBC ドライバではクライアントの設定が使用されます。
  • -O
    isql の以前のバージョンの動作と一致するように、osql の一部の機能を使用不能にします。このオプションを指定すると、次の機能は使用できなくなります。

    • EOF バッチ処理
    • コンソール幅の自動スケーリング
    • 広範なメッセージ

    また、このオプションは DOS ERRORLEVEL の既定値を -1 に設定します。

ms162806.note(ja-jp,SQL.90).gifメモ :
-n、-O、および -D オプションは osql ではサポートされなくなりました。

解説

osql ユーティリティは、ここに記載された、大文字と小文字では異なる機能を持つオプションを使用して、オペレーティング システムから直接起動されます。起動すると、osql は SQL ステートメントを受け取り、対話的にこれらのステートメントを SQL Server に送ります。結果はフォーマットされ、画面に表示されます (stdout)。osql を終了するには、QUIT または EXIT を使用します。

ユーザー名を指定せずに osql を起動すると、SQL Server では osqluser=(user)osqlserver=(server) などの環境変数が確認され、それらの値が使用されます。環境変数が設定されていない場合は、ワークステーションのユーザー名が使用されます。サーバーを指定していない場合は、ワークステーション名が使用されます。

-U-P のどちらのオプションも使用しない場合、SQL Server は Microsoft Windows 認証モードを使用して接続を試みます。認証は、osql を実行しているユーザーの Microsoft Windows アカウントに基づいて行われます。

osql ユーティリティでは ODBC API が使用されます。またこのユーティリティでは、SQL Server の SQL-92 接続オプションに対して SQL Server ODBC ドライバの既定の設定が使用されます。詳細については、「SQL-92 オプションの効果」を参照してください。

ms162806.note(ja-jp,SQL.90).gifメモ :
osql では CLR ユーザー定義データ型はサポートされません。これらのデータ型を処理するには、sqlcmd ユーティリティを使用する必要があります。詳細については、「sqlcmd ユーティリティ」を参照してください。

osql コマンド

osql では、Transact-SQL ステートメントの他に次のコマンドも使用できます。

コマンド 説明

GO

最後の GO の後に入力したすべてのステートメントを実行します。

RESET

入力したステートメントをすべて消去します。

QUIT または EXIT( )

osql を終了します。

Ctrl + C

クエリを終了しますが、osql は終了しません。

ms162806.note(ja-jp,SQL.90).gifメモ :
!! コマンドおよび ED コマンドは osql ではサポートされなくなりました。

コマンド ターミネータ GO (既定値)、RESET、EXIT、QUIT、および Ctrl + C は、行頭の osql プロンプトの直後に使用した場合にだけ認識されます。

GO は、バッチの終わりとキャッシュされた Transact-SQL ステートメントの実行を知らせます。各入力行の終わりで Enter キーを押すと、osql はその行のステートメントをキャッシュします。GO を入力した後 Enter キーを押すと、現在キャッシュされているすべてのステートメントが一括して SQL Server に送られます。

現在の osql ユーティリティは、実行する各スクリプトの終わりに暗黙の GO があるものとして動作します。したがって、スクリプト内のすべてのステートメントが実行されます。

行頭にコマンド ターミネータを入力すると、コマンドが終了します。コマンド ターミネータの後ろに整数を入力すると、コマンドの実行回数を指定できます。たとえば、コマンドを 100 回実行するには、次のように入力します。

SELECT x = 1
GO 100

結果は、実行終了時に 1 回出力されます。osql で 1 行に入力できる文字数は、最大で 1,000 文字です。大きなステートメントは、複数の行に分けてください。

Windows のコマンド再呼び出し機能を使用すると、osql ステートメントの再呼び出しと修正が可能になります。RESET を入力すると、既存のクエリ バッファをクリアできます。

ストアド プロシージャを実行するとき、osql は同じバッチの各結果セットの間に空白行を 1 行ずつ出力します。また、"0 件処理されました" というメッセージは、そのメッセージが実行したステートメントに該当する場合にだけ表示されます。

osql の対話的使用

osql を対話的に使用するには、コマンド プロンプトで osql コマンド (および任意のオプション) を入力します。

次のようなコマンドを入力すると、osql によって実行されるクエリ (Stores.qry など) が含まれているファイルの内容を読み取ることができます。

osql -E -i stores.qry

次のようなコマンドを入力すると、クエリ (Titles.qry など) が含まれているファイルを読み取り、結果を別のファイルに出力できます。

osql -E -i titles.qry -o titles.res
ms162806.security(ja-jp,SQL.90).gifセキュリティ メモ :
可能であれば、-E オプションを使用します (信頼関係接続)。

対話的に osql を使用している場合、:rfile_name を使用して、オペレーティング システム ファイルをコマンド バッファに読み取ることができます。これにより、file_name 内の SQL スクリプトが単一のバッチとして直接サーバーへ送信されます。

ms162806.note(ja-jp,SQL.90).gifメモ :
osql を使用するとき、GO によって SQL スクリプト ファイルに構文エラーが発生する場合、SQL Server は GO をバッチ区切り記号として処理しています。

コメントの挿入

osql で SQL Server に送られる Transact-SQL ステートメントには、コメントを挿入することができます。-- (コメント) と /*...*/ (コメント) の 2 種類のコメント形式があります。

詳細については、「コメントの使用」を参照してください。

EXIT によってosql から返される結果

osql からの戻り値に、SELECT ステートメントの結果を使用できます。結果行の第 1 行目の第 1 列は、4 バイトの (長) 整数に変換されます。MS-DOS は、下位バイトを親プロセスやオペレーティング システムのエラー レベルに渡します。Windows では、4 バイトの整数全体を渡します。構文は次のとおりです。

EXIT ( < query > )

次に例を示します。

EXIT(SELECT @@ROWCOUNT)

バッチ ファイルの一部として、EXIT パラメータを使用することもできます。次に例を示します。

osql -E -Q "EXIT(SELECT COUNT(*) FROM '%1')"

osql ユーティリティでは、かっこ ( ) 内のすべての情報が、入力されたとおりにサーバーに送信されます。システム ストアド プロシージャが値セットを選択し、値を返す場合、選択した値だけが返されます。かっこ内に何も指定せずに EXIT**(** ) ステートメントを指定すると、バッチ内のそのステートメントより前にあるものすべてを実行し、戻り値を返さずに終了します。

EXIT には、次の 4 つの形式があります。

  • EXIT
ms162806.note(ja-jp,SQL.90).gifメモ :
バッチを実行せずに直ちに終了し、値を返しません。
  • EXIT**(** )
ms162806.note(ja-jp,SQL.90).gifメモ :
バッチ実行してから終了し、値を返しません。
  • EXIT**(query)**
ms162806.note(ja-jp,SQL.90).gifメモ :
クエリを含むバッチを実行し、クエリの結果を返して終了します。
  • 状態 127 の RAISERROR ステートメント
ms162806.note(ja-jp,SQL.90).gifメモ :
RAISERROR を osql スクリプトの中で使用し、状態 127 が発生すると、osql は終了し、メッセージ ID をクライアントに返します。次に例を示します。
RAISERROR(50001, 10, 127)

このエラーが発生すると、osql スクリプトが終了し、メッセージ ID 50,001 がクライアントに返されます。

戻り値 -1 ~ -99 は SQL Server によって予約済みです。osql では次のような値を定義しています。

  • -100
    戻り値を選択する前に、エラーが発生した。
  • -101
    戻り値を選択するときに、行が見つからなかった。
  • -102
    戻り値を選択するときに、変換エラーが発生した。

money (金額) と smallmoney (短精度金額) のデータ型の表示

money 型と smallmoney 型については、SQL Server では内部的に小数点以下 4 桁の数値で格納されますが、osql では小数点以下 2 桁の数値が表示されます。次の例の結果を参照してください。

SELECT CAST(CAST(10.3496 AS money) AS decimal(6, 4))
GO

このステートメントの実行結果は 10.3496 で、小数点以下のすべての桁をそのままにして値を格納することを示しています。

参照

その他の技術情報

/*...*/ (コメント) (MDX)
-- (コメント) (MDX)
CAST および CONVERT (Transact-SQL)
Notification Services のセキュリティの設定
RAISERROR (Transact-SQL)

ヘルプおよび情報

SQL Server 2005 の参考資料の入手