次の方法で共有


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

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 エディター] ツールバーの [使用できるデータベース] の一覧で、[AdventureWorks2012] を選択します。

  4. クエリ エディター ウィンドウで、次の 2 つの 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 件処理されました)

    • <The directory information>

    • (4 行処理されました)

重要

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

SQLCMD の実行方法の詳細については、「 sqlcmd Utility」または 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 FrameworkSqlClient を使用して、通常モードと 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:outの場合、 stderrstdout のどちらを指定しても、出力は [メッセージ] タブに送信されます。

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

注意事項

コマンド ラインから 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  

参照

sqlcmd Utility