次の方法で共有


クエリ エディターによる SQLCMD スクリプトの編集

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

SQL Server Management Studio のデータベース エンジン クエリ エディターを使うと、SQLCMD スクリプトとしてクエリを記述し、編集することができます。 Windows システムのコマンドと Transact-SQL ステートメントを同じスクリプトで処理する場合は、SQLCMD スクリプトを使います。

SQLCMD モード

データベース エンジン のクエリ エディターで SQLCMD スクリプトの作成や編集を行うには、SQLCMD スクリプト モードを有効にする必要があります。 クエリ エディターの SQLCMD モードは、既定では有効ではありません。 スクリプト モードを有効にするには、ツール バーの [SQLCMD モード] アイコンを選ぶか、[クエリ] メニューの [SQLCMD モード] を選びます。

SQLCMD モードを有効にすると、データベース エンジン クエリ エディターで、IntelliSense と Transact-SQL デバッガーが無効になります。

クエリ エディターで SQLCMD スクリプトを操作するときには、あらゆる Transact-SQL スクリプトと同じ機能を使用することができます。 使用できる機能には、次のようなものがあります。

  • 色分け
  • スクリプトの実行
  • ソース管理
  • スクリプトの解析
  • Showplan

クエリ エディターで SQLCMD スクリプトを有効にする

アクティブなデータベース エンジン のクエリ エディター ウィンドウで SQLCMD スクリプトを有効にするには、次の手順を実行します。

データベース エンジンのクエリ エディター ウィンドウを SQLCMD モードに切り替える

  1. オブジェクト エクスプローラーで、サーバーを右クリックして [新しいクエリ] を選び、データベース エンジンのクエリ エディター ウィンドウを新しく開きます。

  2. [クエリ] メニューから [SQLCMD モード] を選びます。

    クエリ エディターは、クエリ エディターのコンテキストで SQLCMD ステートメントを実行します。

  3. [SQL エディター] ツール バーの [使用できるデータベース] の一覧で、[ AdventureWorks2022] データベースを選択します。

  4. クエリ エディター ウィンドウに、次の Transact-SQL ステートメントと !!DIR SQLCMD ステートメントを入力します。

    SELECT DISTINCT Type FROM Sales.SpecialOffer;
    GO
    !!DIR
    GO
    SELECT ProductCategoryID, Name FROM Production.ProductCategory;
    GO
    
  5. F5 キーを押して、Transact-SQL と MS-DOS のステートメントが混在するセクションを実行します。

    1 番目と 3 番目のステートメントにより、2 つの SQL 結果ペインが表示されます。

  6. [結果] ペインの [メッセージ] タブを選び、3 つのステートメントすべてから取得されたメッセージを確認します。

    • (6 行が影響を受けました)
    • <ディレクトリ情報>
    • 4 行が影響を受けました

重要

コマンド ラインから実行すると、 sqlcmd ユーティリティではオペレーティング システムとの完全な対話が可能になります。 クエリ エディターを SQLCMD モードで使用する場合は、対話型のステートメントを実行しないように注意してください。 クエリ エディターは、オペレーティング システムのプロンプトに応答できません。

SQLCMD の実行方法の詳細については、 sqlcmd ユーティリティを参照するか、SQLCMD チュートリアルを参照してください。

デフォルトで SQLCMD スクリプトを有効にする

SQLCMD スクリプト操作を既定で有効にするには、[ツール] メニューの [オプション] を選び、[クエリ実行][SQL Server] の順に展開して [全般] ページを選びます。[既定で、新しいクエリを SQLCMD モードで開始する] チェック ボックスをオンにします。

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

スクリプト モードを有効にした後、SQLCMD コマンドと Transact-SQL ステートメントを記述できます。 次の規則が適用されます。

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

  • 各行に 1 つの SQLCMD コマンドだけを記述できます。

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

  • コメント文字の間にはさまれた SQLCMD コマンドは実行されません。

  • 1 行のコメント文字は 2 つのハイフン (--) であり、行の先頭に置く必要があります。

  • オペレーティング システム コマンドの前には 2 つの感嘆符 (!!) を置く必要があります。 2 つの感嘆符が付いたコマンドの場合は、感嘆符の後のステートメントが cmd.exe コマンド プロセッサによって実行されます。 !! の後のテキストは、 cmd.exeにパラメーターとして渡されるので、最終的に実行されるコマンド ラインは、 "%SystemRoot%\system32\cmd.exe /c <text after !!>"になります。

  • SQLCMD コマンドと Transact-SQL を明確に区別するには、すべての SQLCMD コマンドの先頭にコロン (:) を付ける必要があります。

  • GO コマンドは、前置きなしで使用することもでき、または!!:の前にくることも可能です。

  • データベース エンジンのクエリ エディターは、環境変数と、SQLCMD スクリプトの一部として定義されている変数をサポートしています。ただし、組み込みの SQLCMD 変数または osql 変数はサポートしていません。 SQL Server Management Studio による SQLCMD の処理では、変数の大文字と小文字が区別されます。 たとえば、PRINT '$(COMPUTERNAME)' では正しい結果になりますが、PRINT '$(ComputerName)' ではエラーが返されます。

注意事項

SQL Server Management Studio では、Microsoft .NET Framework SqlClient を使用して、通常モードと SQLCMD モードで実行します。 コマンド ラインから SQLCMD を実行する場合は、OLE DB プロバイダーを使用することになります。 異なる既定のオプションが適用される可能性があるため、SQL Server Management Studio SQLCMD モードと sqlcmd ユーティリティで同じクエリを実行すると、異なる動作を得ることができます。

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

データベース エンジン のクエリ エディターでは、以下の SQLCMD スクリプト キーワードをサポートしています。

  • [!!:]GO[count]
  • !! <command>
  • :exit(statement)
  • :Quit
  • :r <filename>
  • :setvar <var> <value>
  • :connect server[\instance] [-l login_timeout] [-U user [-P password]]
  • :on error [ignore|exit]
  • :error <filename>|stderr|stdout
  • :out <filename>|stderr|stdout

:error:outstderrstdout のいずれでも、出力は [メッセージ] タブに送信されます。

クエリ エディターでは、上記以外の SQLCMD コマンドをサポートしていません。 サポートされていない SQLCMD キーワードを含むスクリプトが実行されると、クエリ エディターは、サポートされていないキーワードの宛先ごとに、「< 無視されたコマンド>を無視しました」というメッセージを送信します。 スクリプトは正常に実行されますが、サポートされていないコマンドは無視されます。

注意事項

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

SQLCMD スクリプトの色分け

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

例示

次の例では、現在のディレクトリを出力するために、SQLCMD ステートメントを使って testoutput.txt という出力ファイルを作成し、1 つのオペレーティング システム コマンドで 2 つの Transact-SQL の SELECT ステートメントを実行しています。 結果ファイルには、DIR ステートメントからのメッセージ出力に続き、Transact-SQL ステートメントからの結果の出力が含まれます。

:out C:\testoutput.txt
SELECT @@VERSION As 'Server Version';
!!DIR
!!:GO
SELECT @@SERVERNAME AS 'Server Name';
GO