Share via


方法 : SQL CLR のストアド プロシージャをデバッグする

このトピックの内容は、次の製品に該当します。

エディション

Visual Basic

C#

C++

Web Developer

Express

トピック該当なし トピック該当なし トピック該当なし トピック該当なし

Visual Studio Professional、Visual Studio Premium、および Visual Studio Ultimate

トピック該当 トピック該当 トピック該当 トピック該当

Transact-SQL プロシージャの場合と同様に、ダイレクト データベース デバッグを使用して、既存の SQL Server 共通言語ランタイム (SQL CLR) ストアド プロシージャをデバッグできます。 コンパイルし、それを展開する必要があるので作成または、SQL CLR プロシージャを変更する必要がある場合ただしは動作しません。ない次の手順、Transact-SQLプロシージャ。 この場合、Visual Studio で SQL Server プロジェクトを作成する必要があります。

次のタスクで、新しい SQL CLR ストアド プロシージャを AdventureWorks データベース (SQL Server 2005 でインストールされるデータベースの 1 つ) に作成し、それをデバッグする方法について説明します。 Sales.Currency テーブルに、新しい通貨を追加するストアド プロシージャを作成します。

この例では、SQL Server プロジェクト内のデバッグに焦点を合わせています。 ストアド プロシージャを作成すると、ダイレクト データベース デバッグを使用してデバッグできます。 詳細については、「方法 : サーバー エクスプローラを使用して、オブジェクトに手順」を参照してください。

注意

実際に画面に表示されるダイアログ ボックスとメニュー コマンドは、アクティブな設定またはエディションによっては、ヘルプの説明と異なる場合があります。 設定を変更するには、[ツール] メニューの [設定のインポートとエクスポート] をクリックします。 詳細については、「設定の操作」を参照してください。

SQL CLR オブジェクトをデバッグしようとしたときに "ユーザーによってキャンセルされました" というメッセージが表示された場合は、Visual Studio を実行しているコンピューターと SQL Server を実行しているコンピューターの両方を手動で構成する必要があります。 詳細については、「方法: Transact-SQL デバッグと SQL CLR デバッグを実行するためのコンピューターを構成する」を参照してください。

SQL CLR ストアド プロシージャをデバッグするには

  1. リモート デバッグを有効にします。 詳細については、「方法 : リモート デバッグをセットアップする」を参照してください。

  2. 新しい SQL Server プロジェクトで、AdventureWorks サンプル データベースとの接続を確立します。 詳細については、「方法 : データベースへの接続します。」を参照してください。

  3. 後述する最初のサンプルにあるコードを使用して、新しいストアド プロシージャを作成し、InsertCurrency.cs と名前を付けます。 詳細については、「方法 : SQL Server プロジェクトの種類と開発します。」を参照してください。

  4. ストアド プロシージャをテストするときに呼び出すスクリプトを追加します。 ソリューション エクスプローラー[TestScripts] ディレクトリを右クリックし、[テスト スクリプトの追加] をクリックして、後述する 2 つ目のサンプルにあるコードを挿入します。 このファイルに InsertCurrency.sql という名前を付けて、保存します。 ファイル名を右クリックし、[既定のデバッグ スクリプトの設定] をクリックします。

  5. InsertCurrency.cs にブレークポイントを設定し、[デバッグ] メニューの [開始] をクリックし、プロジェクトのコンパイル、配置、およびユニットのテストを実行します。 黄色の矢印で表される命令ポインターがブレークポイントに表示されて、ストアド プロシージャのデバッグが行われます。

  6. いろいろなデバッグ機能を試してください。

    1. [ローカル] ウィンドウを開いて、[デバッグ] メニューの [ステップ イン] をクリックし、ストアド プロシージャの 1 行をステップ実行します。 [ローカル] ウィンドウでは、変数 @mynvarchar の値が変化しています。値は赤色で表示され、変更されたことを示します。 詳細については、「[ローカル] ウィンドウ」を参照してください。

      注意

      サーバーは、デバッガー ウィンドウの変数値に対する変更を反映しない場合があります。 詳細については、「SQL デバッグの制約」を参照してください。

    2. [ウォッチ] ウィンドウを開きます。 [テキスト エディター] で、InsertCurrencyCommand 変数を [ウォッチ] ウィンドウの任意の場所にドラッグします。

      ウォッチする変数のリストに追加されます。 詳細については、「方法 : デバッガー変数ウィンドウを使用する」を参照してください。

      メモ   [ウォッチ] ウィンドウでも変数の値を編集できます。

    3. テキスト エディターで、InsertCurrencyCommand.ExecuteNonQuery の行を右クリックし、ショートカット メニューの [ブレークポイントの挿入] をクリックします。

    4. [デバッグ] メニューの [続行] をクリックすると、デバッガーで新しいブレークポイントまでのコードが実行されます。

  7. もう一度 [続行] をクリックして、ストアド プロシージャのデバッグを終了します。

    [出力] ウィンドウに、ストアド プロシージャが正常に配置されたことを示すメッセージと、InsertCurrency.sql ファイルのコマンドを実行した結果が表示されます。

使用例

ストアド プロシージャのテンプレートを、このコードで置き換えます。

using System;
using System.Data;
using System.Data.Sql;
using System.Data.SqlServer;
using System.Data.SqlTypes;

public partial class StoredProcedures
{
    [SqlProcedure]
    public static void InsertCurrency(SqlString currencyCode, 
                                               SqlString name)
    {
        using(SqlConnection conn = new SqlConnection("context connection=true")) {
        SqlCommand cmd = new SqlCommand([your SQL statement], conn);
        }
        InsertCurrencyCommand.CommandText = "insert Sales.Currency"
                     + " (CurrencyCode, Name, ModifiedDate) values('" 
                     + currencyCode.ToString() + "', '" 
                     + name.ToString() + "', '" 
                     + DateTime.Now.ToString() + "')";
        InsertCurrencyCommand.ExecuteNonQuery();
    }
}

これは、ストアド プロシージャを実行するときに使用するテスト スクリプトです。

- Delete any row that might exist with a key value
- that matches the one we are going to insert
DELETE Sales.Currency
WHERE CurrencyCode = 'eee'
EXEC InsertCurrency 'eee', 'MyCurr4'
SELECT * FROM Sales.Currency WHERE CurrencyCode = 'eee'

参照

処理手順

方法: 共通言語ランタイム統合機能を使用して SQL Server ストアド プロシージャを作成および実行する

その他の技術情報

方法: Transact-SQL デバッグと SQL CLR デバッグを実行するためのコンピューターを構成する