osql ユーティリティは、ここに記載された、大文字と小文字では異なる機能を持つオプションを使用して、オペレーティング システムから直接起動されます。起動すると、osql は SQL ステートメントを受け取り、対話的にこれらのステートメントを SQL Server に送ります。結果はフォーマットされ、画面に表示されます (stdout)。osql を終了するには、QUIT または EXIT を使用します。
ユーザー名を指定せずに osql を起動すると、osqluser=(user) や osqlserver=(server) などの環境変数が確認され、それらの値が使用されます。環境変数が設定されていない場合は、ワークステーションのユーザー名が使用されます。サーバーを指定していない場合は、ワークステーション名が使用されます。
-U と -P のどちらのオプションも使用しない場合は、接続時に 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 回実行するには、次のように入力します。
結果は、実行終了時に 1 回出力されます。osql で 1 行に入力できる文字数は、最大で 1,000 文字です。大きなステートメントは、複数の行に分けてください。
Windows のコマンド再呼び出し機能を使用すると、osql ステートメントの再呼び出しと修正が可能になります。RESET を入力すると、既存のクエリ バッファをクリアできます。
ストアド プロシージャを実行するとき、osql は同じバッチの各結果セットの間に空白行を 1 行ずつ出力します。また、"0 件処理されました" というメッセージは、そのメッセージが実行したステートメントに該当する場合にだけ表示されます。
osql の対話的使用
osql を対話的に使用するには、コマンド プロンプトで osql コマンド (および任意のオプション) を入力します。
次のようなコマンドを入力すると、osql によって実行されるクエリ (Stores.qry など) が含まれているファイルの内容を読み取ることができます。
次のようなコマンドを入力すると、クエリ (Titles.qry など) が含まれているファイルを読み取り、結果を別のファイルに出力できます。
osql -E -i titles.qry -o titles.res
セキュリティ メモ : |
|---|
|
可能であれば、-E オプションを使用します (信頼関係接続)。
|
対話的に osql を使用している場合、:r file_name を使用して、オペレーティング システム ファイルをコマンド バッファに読み取ることができます。これにより、file_name 内の SQL スクリプトが単一のバッチとして直接サーバーへ送信されます。
メモ : |
|---|
|
osql を使用するとき、GO によって SQL スクリプト ファイルに構文エラーが発生する場合、SQL Server は GO をバッチ区切り記号として処理しています。
|
コメントの挿入
osql で SQL Server に送られる Transact-SQL ステートメントには、コメントを挿入することができます。-- (コメント) と /*...*/ (コメント) の 2 種類のコメント形式があります。
詳細については、「コメントの使用」を参照してください。
EXIT によって osql から返される結果
osql からの戻り値に、SELECT ステートメントの結果を使用できます。結果行の第 1 行目の第 1 列は、4 バイトの (長) 整数に変換されます。MS-DOS は、下位バイトを親プロセスやオペレーティング システムのエラー レベルに渡します。Windows では、4 バイトの整数全体を渡します。構文は次のとおりです。
次に例を示します。
バッチ ファイルの一部として、EXIT パラメータを使用することもできます。次に例を示します。
osql -E -Q "EXIT(SELECT COUNT(*) FROM '%1')"
osql ユーティリティでは、かっこ ( ) 内のすべての情報が、入力されたとおりにサーバーに送信されます。システム ストアド プロシージャが値セットを選択し、値を返す場合、選択した値だけが返されます。かっこ内に何も指定せずに EXIT( ) ステートメントを指定すると、バッチ内のそのステートメントより前にあるものすべてを実行し、戻り値を返さずに終了します。
EXIT には、次の 4 つの形式があります。
メモ : |
|---|
|
バッチを実行せずに直ちに終了し、値を返しません。
|
メモ : |
|---|
|
バッチ実行してから終了し、値を返しません。
|
メモ : |
|---|
|
クエリを含むバッチを実行し、クエリの結果を返して終了します。
|
-
状態 127 の RAISERROR ステートメント
メモ : |
|---|
|
RAISERROR を osql スクリプトの中で使用し、状態 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 で、小数点以下のすべての桁をそのままにして値を格納することを示しています。