次の方法で共有


Transact-SQL エディターでの SQLCMD スクリプトの編集

Transact-SQL エディターでスクリプトを作成または編集するときは、SQLCMD モードが有効になっていれば、Transact-SQL コマンドと SQLCMD コマンドを組み合わせて使用することができます。詳細については、「方法: Transact-SQL エディターで SQLCMD モードを有効にする」を参照してください。

SQLCMD スクリプトの作成と編集

SQLCMD コマンドと Transact-SQL コマンドを同じスクリプトに含める場合は、スクリプトが以下の要件を満たしていることを確認する必要があります。

  • SQLCMD コマンドは行の最初のステートメントでなければなりません。

  • 各行に記述できる SQLCMD コマンドは 1 つだけです。

  • SQLCMD コマンドの前にコメントや空白文字を入れてもかまいません。

  • 1 行のコメント文字は 2 つのハイフン (--) であり、行の先頭に置く必要があります。コメント文字を使用すると、SQLCMD コマンドは実行されません。

  • 各 SQLCMD コマンドの前 (行の先頭) に、Transact-SQL コマンドと明確に区別するためのコロンを置く必要があります。例外は exit と !! のみで、これらのコマンドの場合、コロンは省略可能です。

  • SQLCMD スクリプトの一部として定義されている変数と環境変数を使用することもできますが、組み込みの SQLCMD 変数は使用できません。

サポートされている SQLCMD 構文

次のコマンドを使用できます。

  • :r FileName
    FileName によって指定されたファイルを基に、追加の Transact-SQL ステートメントと SQLCMD コマンドを解析し、ステートメント キャッシュ内に登録します。 FileName は、Visual Studio のスタートアップ ディレクトリと関連して読み取られます。ファイルは、バッチ ターミネータが検出された後に読み取られ、実行されます。:r コマンドは複数発行できます。このファイルには、[ツール] メニューの [オプション] をクリックして定義されるバッチ ターミネータなど、任意の SQLCMD コマンドを含めることができます。:r を配置前スクリプトまたは配置後スクリプトで使用すると、他のスクリプトを含めることができます。

  • :setvar Variable Value
    スクリプト変数を定義します。スクリプト変数は $(Variable) という形式になります。変数名の大文字と小文字は区別されません。:Setvar を使って定義した変数と環境変数が同じ名前の場合は、:setvar を使用して定義した変数が優先されます。変数名にはスペース文字を含めることはできません。また変数名には、$(var) のような変数表現と同じ形式を使用することはできません。スクリプト変数の文字列値に空白文字が含まれる場合は、値を引用符で囲む必要があります。スクリプト変数の値を設定していない場合、そのスクリプト変数は削除されます。

  • :connect ServerName[\InstanceName] [-l Timeout] [-U UserName [-P Password]]
    SQL Server のインスタンスに接続し、Timeout によって指定された秒数が経過した後で現在の接続を閉じます。無期限のタイムアウトを示す "-l 0" を指定することも、秒数を示す正の値 ("-l 30" など) を指定することもできます。UserName と Password に対応するオプションと環境変数のいずれも指定しなかった場合は、Windows 認証モードがログオンに使用されます。 connect SQLCMD コマンドを Transact-SQL エディターで実行する場合も、データベース サーバーに接続するよう求めるメッセージが [データベース エンジンへの接続] ウィンドウに表示されます。

  • :on error [exit | ignore]
    スクリプト実行中またはバッチ実行中のエラー発生時に対応するアクションを設定します。exit オプションを使用した場合は、該当するエラー値が表示されて実行が終了しますignore オプションを使用した場合、Transact-SQL エディターはエラーを無視し、バッチまたはスクリプトの実行を続行します。既定では、エラー メッセージが出力されます。

  • :out Filename | stderr | stdout
    すべてのクエリ結果を、Filename によって指定されたファイル、または [メッセージ] タブにリダイレクトします (Visual Studio では、stderr と stdout は出力を [メッセージ] タブに送ります)。 out コマンドは、1 つのスクリプト内で複数回使用できます。既定では、出力は [メッセージ] タブに送られます。Filename が指定されている場合、Visual Studio はクエリ結果を取得するためのファイルを作成するか、開きます。ファイルが既に存在している場合、ファイルは出力を作成する前に 0 バイトに切り詰められます。

  • :error Filename | stderr | stdout
    すべてのエラー出力を、Filename によって指定されたファイル、または [メッセージ] タブにリダイレクトします (Visual Studio では、stderr と stdout は出力を [メッセージ] タブに送ります)。  error コマンドは、1 つのスクリプト内で複数回使用できます。既定では、エラー出力は stderr に送られます。Filename が指定されている場合、Visual Studio はエラー メッセージを取得するためのファイルを作成するか、開きます。ファイルが既に存在している場合、ファイルはエラー メッセージを作成する前に 0 バイトに切り詰められます。

  • [:]exit
    バッチを実行したり、値を返したりせずに、現在のバッチを停止します。

  • [:]exit()
    バッチを実行してから停止し、値を返しません。

  • [:]exit(Query)
    バッチ (Query を含む) を実行し、Query の結果を返してから停止します。

  • [:]!!Operating system command
    Visual Studio が実行されているコンピューターでオペレーティング システム コマンドを実行します。オペレーティング システムのコマンドを実行するには、行頭に 2 つの感嘆符 (!!) を入力し、続けてオペレーティング システムのコマンドを入力します。

注意

コマンド ラインから SQLCMD を実行する場合とは異なり、Transact-SQL エディターの SQLCMD モードにはいくつかの制限事項があります。まず、変数などのコマンド ライン パラメーターを受け渡すことができません。また、Transact-SQL エディターはオペレーティング システムのプロンプトに応答できないため、対話型のステートメントを実行しないように注意してください。

Transact-SQL エディターでは、上記以外の SQLCMD コマンドをサポートしていません。サポートされていない SQLCMD キーワードが実行されると、サポートされていないキーワードごとに、"Command <unsupported command> is not supported. String was not processed." というメッセージが Transact-SQL エディターから宛先に送信されます。スクリプトは正常に実行されますが、サポートされていないコマンドは無視されます。

SQLCMD スクリプトのコードの色分け

[SQLCMD モード] が有効になっていると、スクリプトのコードが色分けされます。Transact-SQL キーワードの色分けは変わりません。SQLCMD コマンドは、背景が影付きになります。

次の例では、SQLCMD ステートメントを使用して、c:\TempSqlcmdOutput という名前の出力フォルダーと testoutput.txt という名前の出力ファイルが作成されます。また、2 つの Transact-SQL SELECT ステートメントともう 1 つの SQLCMD コマンドを使用することで、Visual Studio プログラムの現在のディレクトリが出力されます。結果ファイルには、DIR ステートメントからのメッセージ出力に続いて、Transact-SQL ステートメントからの結果の出力が含まれます。この例では、SQL Server のインスタンスへの接続が既に確立され、[SQLCMD モード] が有効になっていることが前提となっています。

!!mkdir c:\TempSqlcmdOutput
:out c:\TempSqlCmdOutput\testoutput.txt
select @@VERSION as 'Server Version'
!!dir
GO
select @@SERVERNAME as 'Server Name'
GO 4

関連項目

タスク

方法: クエリを実行する

方法: クエリの実行と結果に関するオプションを設定する

概念

クエリ結果の概要