osql ユーティリティ

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

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

重要

この機能は、 SQL Serverの将来のバージョンで削除される予定です。 新しい開発作業では、この機能を使用しないでください。また、現在この機能を使用しているアプリケーションの変更を計画してください。 代わりに sqlcmd を使用します。 詳細については、「 sqlcmd Utility」を参照してください。

構文

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

Note

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

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

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

重要

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

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

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 のインスタンスを指定します。 サーバー上の の既定のインスタンスに接続するには、 server_name SQL Server を指定します。 サーバー上の 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 ステートメントが含まれているサイズの大きいスクリプトを実行する場合に、パフォーマンスが向上します。 Microsoft のテストでは、一括コピーが最も速くなる設定値は 8,192 という結果が出ています。 大きなパケット サイズを要求することもできますが、要求が認められない場合は、サーバーでの既定値が osql での既定値になります。

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

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

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

Note

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

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

Note

-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 認証モードが使用されます。 認証は、 Microsoft osql を実行しているユーザーのWindows アカウントに基づいて行われます。

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

Note

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

OSQL コマンド

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

コマンド 説明
GO 最後の GO の後に入力したすべてのステートメントを実行します。
RESET 入力したステートメントをすべて消去します。
QUIT または EXIT( ) osqlを終了します。
Ctrl + C クエリを終了しますが、 osqlは終了しません。

Note

!! コマンド および 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 スクリプトが単一のバッチとして直接サーバーへ送信されます。

Note

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

コメントの挿入

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

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

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

EXIT ( < query > )  

次に例を示します。

EXIT(SELECT @@ROWCOUNT)  

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

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

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

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

  • EXIT

Note

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

  • EXIT**()**

Note

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

  • EXIT**(query)**

Note

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

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

Note

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

RAISERROR(50001, 10, 127)  

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

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

  • -100

    戻り値を選択する前に、エラーが発生した。

  • -101

    戻り値を選択するときに、行が見つからなかった。

  • -102

    戻り値を選択するときに、変換エラーが発生した。

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

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

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

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

参照

コメント (MDX)
-- (コメント) (MDX)
CAST および CONVERT (Transact-SQL)
RAISERROR (Transact-SQL)