方法 : 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 ストアド プロシージャをデバッグするには
リモート デバッグを有効にします。 詳細については、「方法 : リモート デバッグをセットアップする」を参照してください。
新しい SQL Server プロジェクトで、AdventureWorks サンプル データベースとの接続を確立します。 詳細については、「方法 : データベースへの接続します。」を参照してください。
後述する最初のサンプルにあるコードを使用して、新しいストアド プロシージャを作成し、InsertCurrency.cs と名前を付けます。 詳細については、「方法 : SQL Server プロジェクトの種類と開発します。」を参照してください。
ストアド プロシージャをテストするときに呼び出すスクリプトを追加します。 ソリューション エクスプローラーの [TestScripts] ディレクトリを右クリックし、[テスト スクリプトの追加] をクリックして、後述する 2 つ目のサンプルにあるコードを挿入します。 このファイルに InsertCurrency.sql という名前を付けて、保存します。 ファイル名を右クリックし、[既定のデバッグ スクリプトの設定] をクリックします。
InsertCurrency.cs にブレークポイントを設定し、[デバッグ] メニューの [開始] をクリックし、プロジェクトのコンパイル、配置、およびユニットのテストを実行します。 黄色の矢印で表される命令ポインターがブレークポイントに表示されて、ストアド プロシージャのデバッグが行われます。
いろいろなデバッグ機能を試してください。
[ローカル] ウィンドウを開いて、[デバッグ] メニューの [ステップ イン] をクリックし、ストアド プロシージャの 1 行をステップ実行します。 [ローカル] ウィンドウでは、変数 @mynvarchar の値が変化しています。値は赤色で表示され、変更されたことを示します。 詳細については、「[ローカル] ウィンドウ」を参照してください。
注意
サーバーは、デバッガー ウィンドウの変数値に対する変更を反映しない場合があります。 詳細については、「SQL デバッグの制約」を参照してください。
[ウォッチ] ウィンドウを開きます。 [テキスト エディター] で、InsertCurrencyCommand 変数を [ウォッチ] ウィンドウの任意の場所にドラッグします。
ウォッチする変数のリストに追加されます。 詳細については、「方法 : デバッガー変数ウィンドウを使用する」を参照してください。
メモ [ウォッチ] ウィンドウでも変数の値を編集できます。
テキスト エディターで、InsertCurrencyCommand.ExecuteNonQuery の行を右クリックし、ショートカット メニューの [ブレークポイントの挿入] をクリックします。
[デバッグ] メニューの [続行] をクリックすると、デバッガーで新しいブレークポイントまでのコードが実行されます。
もう一度 [続行] をクリックして、ストアド プロシージャのデバッグを終了します。
[出力] ウィンドウに、ストアド プロシージャが正常に配置されたことを示すメッセージと、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 ストアド プロシージャを作成および実行する