sqlcmd ユーティリティのコマンド

対象者:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analyticsアナリティクスプラットフォームシステム(PDW)Microsoft FabricにおけるSQLデータベース

sqlcmd ユーティリティは、Transact-SQL ステートメント、システム プロシージャ、およびスクリプト ファイルを受け入れます。

Note

システムにインストールされている sqlcmd のバリアントとバージョンを確認するには、 sqlcmd ユーティリティのインストール済みバージョンを確認するを参照してください。 sqlcmd を取得する方法については、「sqlcmd ユーティリティのダウンロードとインストール」を参照してください。

sqlcmd 内の Transact-SQL ステートメントに加えて、次のコマンドを使用します。

  • GO [ <count> ]
  • :List
  • [:]RESET
  • :Error
  • [:]ED 1
  • :Out
  • [:]!!
  • :Perftrace
  • [:]QUIT
  • :Connect
  • [:]EXIT
  • :On Error
  • :r
  • :Help
  • :ServerList 1
  • :XML [ ON | OFF ] 1
  • :Setvar
  • :Listvar

1 Linux または macOS ではサポートされていません。

sqlcmd コマンドを使用する場合は、次の点に注意してください。

  • を除くすべての GO コマンドは、コロン (:) で始まる必要があります。

    Important

    既存の osql スクリプトとの下位互換性を維持するために、一部のコマンドはコロンなしで動作します ( [:]で示されます)。

  • sqlcmd は、コマンドが行の先頭に表示される場合にのみ認識します。

  • すべての sqlcmd コマンドには、大文字と小文字の区別はありません。

  • 各コマンドは個別の行に指定する必要があります。 Transact-SQL ステートメントまたは別のコマンドを使用してコマンドを実行することはできません。

  • コマンドはすぐに実行されます。 Transact-SQL ステートメントのように、実行バッファーに配置されません。

コマンドの編集

[:]ED

テキスト エディターを開始します。 このエディターを使用して、現在の Transact-SQL バッチまたは最後の実行バッチを編集します。 最後の実行バッチを編集するには、最後のバッチの実行が完了した直後に ED コマンドを入力します。

SQLCMDEDITOR環境変数は、テキスト エディターを定義します。 既定のエディターは Edit です。 エディターを変更するには、SQLCMDEDITOR 環境変数を設定します。 たとえば、エディターを Microsoft メモ帳に設定するには、次のコマンドを入力します。

SET SQLCMDEDITOR=notepad

[:]RESET

ステートメント キャッシュをクリアします。

:List

ステートメント キャッシュの内容を出力します。

Variables

:Setvar <var> [ "" ]

sqlcmd スクリプト変数を定義します。 スクリプト変数は $(VARNAME)という形式になります。

変数名では大文字と小文字が区別されません。

スクリプト変数は次の方法で指定できます:

  • コマンド ラインのオプションを暗黙的に使用します。 たとえば、-l オプションでは SQLCMDLOGINTIMEOUTsqlcmd 変数が設定されます。
  • :Setvar コマンドを明示的に使用します。
  • sqlcmd を実行する前に環境変数を定義する。

Note

-X オプションを使用すると、環境変数が sqlcmd に渡されなくなります。

:Setvar を使って定義した変数と環境変数が同じ名前の場合は、:Setvar を使用して定義した変数が優先されます。

変数名には空白文字を含めることはできません。

変数名には、$(var) のような変数表現と同じ形式を使うことはできません。

スクリプト変数の文字列値に空白文字が含まれる場合は、値を引用符で囲みます。 スクリプト変数の値を設定していない場合は、そのスクリプト変数は削除されます。

:Listvar

現在設定されているスクリプト変数の一覧を表示します。

Note

sqlcmdによって設定されたスクリプト変数および :Setvar コマンドを使用して設定された変数のみが表示されます。

出力コマンド

:エラー <filename> | STDERR | STDOUT

すべてのエラー出力を、 ファイル名で指定されたファイル、 stderr、または stdoutにリダイレクトします。 :Error コマンドは、1 つのスクリプト内で複数回使用できます。 既定では、エラー出力は stderr になります。

  • filename

    出力を受信するファイルを作成して開きます。 既存のファイルは 0 バイトに切り捨てられます。 アクセス許可またはその他の理由によりファイルが使用できない場合、出力は切り替えされず、最後に指定または既定の宛先がエラー出力を受け取ります。

  • STDERR

    エラー出力を stderr ストリームに切り替えます。 出力がリダイレクトされた場合、ストリームのリダイレクト先のターゲットはエラー出力を受け取ります。

  • STDOUT

    エラー出力を stdout ストリームに切り替えます。 出力がリダイレクトされた場合、ストリームのリダイレクト先のターゲットはエラー出力を受け取ります。

:Out <ファイル名> | STDERR | STDOUT

すべてのクエリ結果をファイル で指定されたファイル、 stderr、または stdoutに作成してリダイレクトします。 既定では、出力は stdoutされます。 ファイルが既に存在している場合は、ファイルは 0 バイトに切り詰められます。 :Out コマンドは、1 つのスクリプト内で複数回使用できます。

:Perftrace <ファイル名> | STDERR | STDOUT

すべてのパフォーマンス トレース情報をファイル で指定されたファイル、 stderr、または stdoutに作成してリダイレクトします。 既定では、パフォーマンス トレースの出力は stdout になります。 既存のファイルは 0 バイトに切り捨てられます。 :Perftrace コマンドは、1 つのスクリプト内で複数回使用できます。

実行制御コマンド

:エラー時の処理 [終了 | 無視]

スクリプトまたはバッチの実行中にエラーが発生したときに実行するアクションを設定します。

exit オプションを使用すると、sqlcmd は適切なエラー値で終了します。

ignore オプションを使用すると、sqlcmd はエラーを無視し、バッチまたはスクリプトの実行を続行します。 既定では、 sqlcmd はエラー メッセージを出力します。

[:]QUIT

sqlcmd が終了します。

[:]EXIT [ ( ステートメント ) ]

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

例えば次が挙げられます。

:EXIT(SELECT @@ROWCOUNT)

バッチ ファイルの一部として、:EXIT パラメーターを含めることもできます。 たとえば、コマンド プロンプトで次のように入力します:

sqlcmd -Q ":EXIT(SELECT COUNT(*) FROM '%1')"

sqlcmd ユーティリティにより、かっこ (()) 内のすべての情報がサーバーに送信されます。 システム ストアド プロシージャで 1 つの値セットを選択し、値を返すように指定した場合、返されるのは選択した値のみです。 かっこの間に何も含まない :EXIT() ステートメントは、バッチ内の前のすべてを実行し、戻り値なしで終了します。

正しくないクエリを指定すると、 sqlcmd は戻り値なしで終了します。

EXIT 形式の一覧を次に示します。

  • :EXIT

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

  • :EXIT( )

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

  • :EXIT(query)

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

RAISERROR スクリプト内でを使用し、状態が 127 の場合、sqlcmd は終了し、メッセージ ID をクライアントに返します。 例えば次が挙げられます。

RAISERROR(50001, 10, 127)

このエラーにより、sqlcmd スクリプトは終了し、メッセージ ID 50001 がクライアントに返されます。

-1-99戻り値は SQL Server によって予約され、sqlcmd は追加の戻り値を定義します。

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

実行 [count]

GO は、バッチの終わりとキャッシュされた Transact-SQL ステートメントの実行を知らせます。 バッチは、個別のバッチとして複数回実行されます。 1 回のバッチで変数を複数回宣言することはできません。

その他のコマンド

:r <filename>

ファイル名で指定されたファイルからステートメント キャッシュに追加の Transact-SQL ステートメントと sqlcmd コマンドを解析します。 sqlcmd は 、スタートアップ ディレクトリを基準にファイル を読み取ります。

GO が最後に記述されていない Transact-SQL ステートメントがファイルに含まれている場合は、その行の GO の後に :r を入力する必要があります。

sqlcmd は、バッチ ターミネータが検出された後、ファイルを読み取って実行します。 :r コマンドは複数発行できます。 このファイルにはバッチ ターミネータ など、任意の GO コマンドを含めることができます。

Note

対話モードで表示される行数は、検出されたすべての :r コマンドに対して 1 つ増加します。 :r コマンドが list コマンドの出力に表示されます。

:ServerList

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

:Connect server_name[\instance_name] [-l timeout] [-U user_name [-P password]] [-N[s|m|o]] [-F hostname_in_certificate]

SQL Server のインスタンスに接続します。 また、現在の接続を終了します。

Important

:Connect コマンドは、暗黙的なバッチ区切り記号として機能しません。 現在のバッチでバッファーに格納されている Transact-SQL ステートメントは、 GO コマンドが発行されるまで実行されません。 :Connectステートメントを介入せずに複数のGO コマンドを使用する場合、バッファー内のすべてのステートメントは、各サーバーに対してではなく、最後に接続されたサーバーに対して実行されます。

  • 暗号化オプション (-N[s|m|o]):

    暗号化された接続を要求するには、このオプションを使用します。 -Nを含めない場合は、-Nm (mandatoryの場合) が既定です。 このオプションは、SQL Server 2022 (16.x) 以前のバージョンからの破壊的変更であり、 -No ( optionalの場合) が既定値です。

    Value Description
    -Ns
    -Nm (既定値) Mandatory
    -No オプション
  • 証明書のホスト名 (-F hostname_in_certificate)

    サーバー証明書の検証中に使用するサーバー証明書の別の予期される共通名 (CN) またはサブジェクト代替名 (SAN) を指定します。 このオプションを指定しない場合、証明書の検証により、証明書内の CN または SAN が、接続先のサーバー名と一致することが保証されます。 このパラメーターは、サーバー名が CN または SAN と一致しない場合 (DNS エイリアスを使用する場合など) に設定できます。

  • タイムアウト オプション:

    Value Behavior
    0 永遠に待つ
    n>0 n 秒間待機します

    SQLCMDSERVER スクリプト変数により、現在のアクティブな接続が反映されます。

    timeout を指定しないと、SQLCMDLOGINTIMEOUT 変数の値が既定値になります。

user_nameのみを (オプションまたは環境変数として) 指定した場合、sqlcmd はパスワードの入力を求めるメッセージを表示します。 SQLCMDUSER または SQLCMDPASSWORD の環境変数が設定されている場合、ユーザーにプロンプトは表示されません。 オプションも環境変数も指定しない場合は、Windows 認証モードを使用してサインインします。 たとえば、統合セキュリティを使用して、SQL Server instance1 のインスタンス myserver に接続するには、次のコマンドを使用します:

:connect myserver\instance1

スクリプト変数を使用して myserver の既定のインスタンスに接続するには、次の設定を使用します。

:setvar myusername test
:setvar myservername myserver
:connect $(myservername) $(myusername)

[:]!! command

オペレーティング システム コマンドを実行します。 オペレーティング システム コマンドを実行するには、2 つの感嘆符 (!!) の後にオペレーティング システム コマンドが続く行を開始します。 例えば次が挙げられます。

:!! dir

Note

このコマンドは、 sqlcmd が実行されているコンピューターで実行されます。

:XML [ オン | オフ ]

詳細については、この記事の「XML 出力形式」と「JSON 出力形式」を参照してください。

:Help

各コマンドの簡単な説明と共に、 sqlcmd コマンドを一覧表示します。

sqlcmd のファイル名

オプションまたは -i コマンドを使用して:r 入力ファイルを指定します。 -o オプションまたは:Error:Out、および:Perftraceコマンドを使用して出力ファイルを指定します。 これらのファイルを使用する場合は、次のガイドラインを使用します。

  • :Error、および:Outに個別の:Perftraceの値を使用します。 同じ ファイル名を使用すると、コマンドによって入力が混在する可能性があります。

  • ローカル コンピューター上の sqlcmd からリモート サーバーにある入力ファイルを呼び出し、そのファイルに :Out c:\OutputFile.txt などのドライブ ファイル パスが含まれている場合、 sqlcmd はリモート サーバーではなくローカル コンピューターに出力ファイルを作成します。

  • 有効なファイル パスは、C:\<filename>\\<Server>\<Share$>\<filename>"C:\Some Folder\<file name>" などです。 パスに空白が含まれる場合は、引用符を使用します。

  • 各新規 sqlcmd セッションにより、同じ名前の既存のファイルが上書きされます。

情報メッセージ

sqlcmd は、サーバーが送信する情報メッセージを出力します。 次の例では、 sqlcmd が Transact-SQL ステートメントを実行した後、情報メッセージを出力します。

sqlcmd を起動します。 sqlcmd コマンド プロンプトで次のクエリを入力します:

USE AdventureWorks2025;
GO

Enter キーを押すと、sqlcmd は次の情報メッセージを出力します。

Changed database context to 'AdventureWorks2025'.

Transact-SQL クエリからの出力形式

まず、sqlcmd は SELECT リストで指定した列名を含む列ヘッダーを出力します。 列名は、SQLCMDCOLSEP の文字を使用して区切られます。 既定では、この列の区切り記号はスペースです。 列名が列幅より短い場合、 sqlcmd は出力に次の列までのスペースを埋め込みます。

sqlcmd は、一連のダッシュ文字である区切り線を出力します。 次に出力の例を示します。

sqlcmd を起動します。 sqlcmd コマンド プロンプトで次のクエリを入力します:

USE AdventureWorks2025;

SELECT TOP (2) BusinessEntityID,
               FirstName,
               LastName
FROM Person.Person;
GO

Enter キーを押すと、sqlcmd は次の結果セットを返します。

BusinessEntityID FirstName    LastName
---------------- ------------ ----------
285              Syed         Abbas
293              Catherine    Abel
(2 row(s) affected)

BusinessEntityID列の幅は 4 文字のみですが、長い列名に合わせて拡張されます。 既定では、 sqlcmd は 80 文字で出力を終了します。 この幅を変更するには、 -w オプションを使用するか、 SQLCMDCOLWIDTH スクリプト変数を設定します。

XML 出力形式

FOR XML 句からの結果である XML 出力は、連続するストリームでフォーマットされずに出力されます。

XML 出力を行うには、:XML ONコマンドを使用します。

Note

sqlcmd は、通常の形式のエラー メッセージを返します。 エラー メッセージは XML 形式の XML テキスト ストリームでも出力されます。 :XML ONを使用すると、sqlcmd 情報メッセージは表示されません。

XML モードをオフにするには、:XML OFF コマンドを使用します。

GO コマンドは :XML OFF を行指向の出力に切り替えるので、:XML OFF コマンドの実行前に コマンドは指定しないでください。

XML (ストリーム入力) データと行セットのデータを混在させることはできません。 XML ストリームを出力する Transact-SQL ステートメントが実行される前に :XML ON コマンドが発行されなかった場合、出力は文字化けします。 :XML ON コマンドが発行されると、通常の行セットを出力するステートメント Transact-SQL 実行することはできません。

Note

:XML コマンドは、SET STATISTICS XML ステートメントをサポートしていません。

JSON 出力形式

JSON 出力を行うには、:XML ONコマンドを使用します。 そうでない場合、出力には、列名と JSON テキストの両方が含まれます。 この出力は、有効な JSON ではありません。

XML モードをオフにするには、:XML OFF コマンドを使用します。

詳細については、この記事の「XML 出力形式」を参照してください。

Microsoft Entra 認証を使用する

Microsoft Entra 認証を使用する例:

sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net  -G  -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -U bob@contoso.com -P MyAzureADPassword -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net  -G  -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -U bob@contoso.com -P MyAzureADPassword -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net  -G  -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -U bob@contoso.com -P MyAzureADPassword -l 30