osql ユーティリティ

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

重要な注意事項重要

この機能は、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
    ローカルに構成されたサーバーと、ネットワーク上でブロードキャストしているサーバー名のリストを表示します。

    注意

    ネットワーク上のブロードキャストの特性によっては、osql は、一部のサーバーからタイムリーな応答を受信できない場合があります。そのため、返されるサーバーのリストは、このオプションを呼び出すたびに異なる可能性があります。

  • -Ulogin_id
    ユーザーのログイン ID です。ログイン ID では大文字と小文字が区別されます。

  • -Ppassword
    ユーザーが指定するパスワードです。-P オプションを使用しない場合は、osql によってパスワードが要求されます。-P オプションをコマンド プロンプトの最後にパスワードなしで使用すると、osql で既定のパスワード (NULL) が使用されます。

    セキュリティに関する注意セキュリティに関する注意

    空白のパスワードは使用しないでください。強力なパスワードを使用してください。詳細については、「強力なパスワード」を参照してください。

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

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

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

    C:\>SET OSQLPASSWORD=abracadabra
    C:\>osql 
    
    セキュリティに関する注意セキュリティに関する注意

    パスワードをマスクする場合は、-P オプションを -U と共に指定しないでください。osql-U オプションおよび他のスイッチと共に指定した後 (-P は指定しない)、Enter キーを押すと、osql によってパスワードが要求されます。この方法を使用すると、入力時にパスワードが確実にマスクされます。

  • -E
    パスワードを要求せずに、セキュリティ接続を使用します。

  • -Sserver_name[ **\instance_name]
    接続先となる 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 ~ 65535 です。既定値の osql は、サーバーの既定値です。パケット サイズを大きくすると、各 GO コマンドの間に多くの SQL ステートメントが含まれているサイズの大きいスクリプトを実行する場合に、パフォーマンスが向上します。弊社のテストでは、一括コピーが最も速くなる設定値は 8,192 という結果が出ています。大きなパケット サイズを要求することもできますが、要求が許可されない場合は、osql がサーバーの既定値になります。

  • -e
    入力のエコーを返します。

  • -I
    QUOTED_IDENTIFIER 接続オプションを有効にします。

  • -Ddata_source_name
    SQL Server 用の ODBC ドライバーを使用して定義された ODBC データ ソースに接続します。osql 接続では、データ ソースで指定されたオプションが使用されます。

    注意

    このオプションは、他のドライバー用に定義されたデータ ソースでは機能しません。

  • -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
    入力行から行番号とプロンプト記号 (>) を削除します。

  • -merror_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 に設定します。

注意

-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 の ISO 接続オプションに対して SQL Server ODBC ドライバーの既定の設定が使用されます。詳細については、「ANSI オプションの効果」を参照してください。

注意

osql ユーティリティは、CLR ユーザー定義データ型をサポートしていません。これらのデータ型を処理するには、sqlcmd ユーティリティを使用する必要があります。詳細については、「sqlcmd ユーティリティ」を参照してください。

OSQL コマンド

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

コマンド

説明

GO

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

RESET

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

QUIT または EXIT( )

osql を終了します。

Ctrl + C

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

注意

!! コマンドと 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
セキュリティに関する注意セキュリティに関する注意

可能であれば、-E オプション (セキュリティ接続) を使用します。

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

注意

osql を使用しているときに、SQL スクリプト ファイルで GO が構文エラーになる場合、SQL Server は GO をバッチ区切り記号として処理します。

コメントの挿入

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

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

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

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

EXIT ( < query > )

次に例を示します。

EXIT(SELECT @@ROWCOUNT)

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

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

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

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

  • EXIT
注意

バッチを実行せずに直ちに終了し、値を返しません。

  • EXIT**(** )
注意

バッチ実行してから終了し、値を返しません。

  • EXIT**(query)**
注意

クエリを含むバッチを実行し、クエリの結果を返して終了します。

  • 状態 127 の RAISERROR ステートメント
注意

osql スクリプト内で RAISERROR を使用し、状態 127 が発生すると、osql は終了し、メッセージ ID をクライアントに返します。次に例を示します。

RAISERROR(50001, 10, 127)

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

戻り値 -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 で、小数点以下のすべての桁をそのままにして値を格納することを示しています。