次の方法で共有


CLR データベース オブジェクトのデバッグ

SQL Serverでは、データベース内の Transact-SQL オブジェクトと共通言語ランタイム (CLR) オブジェクトのデバッグがサポートされます。 SQL Serverでのデバッグの主な側面は、セットアップと使用の容易さ、および Microsoft Visual Studio デバッガーとのSQL Server デバッガーの統合です。 さらに、複数の言語にまたがったデバッグを実行できます。 ユーザーは Transact-SQL から CLR オブジェクトにシームレスにステップインできます。また、その逆も可能です。 SQL Server Management Studio の Transact-SQL デバッガーを使用してマネージド データベース オブジェクトをデバッグすることはできませんが、Visual Studio のデバッガーを使用すると、このオブジェクトをデバッグすることができます。 Visual Studio でのマネージド データベース オブジェクトのデバッグでは、サーバーで実行するルーチン内の "step into" ステートメントや "step over" ステートメントなど、一般的なデバッグ機能すべてがサポートされます。 デバッグ中は、ブレークポイントの設定、呼び出し履歴の調査、変数の調査、変数値の変更を行うことができます。 Visual Studio .NET 2003 は、CLR 統合プログラミングまたはデバッグには使用できない点に注意してください。 SQL Serverにはプレインストールされている.NET Frameworkが含まれており、Visual Studio .NET 2003 では .NET Framework 2.0 アセンブリを使用できません。

Visual Studio を使用したマネージド コードのデバッグの詳細については、Visual Studio ドキュメントの「マネージド コードのデバッグ」トピックを参照してください。

デバッグに関する権限と制限事項

デバッグは高い特権を持つ操作であるため、sysadmin 固定サーバー ロールのメンバーのみがSQL Serverで許可されます。

デバッグ中には、次の制限事項が適用されます。

  • CLR ルーチンを同時にデバッグできるデバッガー インスタンスは 1 つに制限されます。 この制限が適用されるのは、ブレークポイントに到達するとすべての CLR コードの実行が停止し、デバッガーがブレークポイントから先に動作を進めるまで、コードの実行を再開できないことが理由です。 ただし、他の接続での Transact-SQL のデバッグは継続できます。 Transact-SQL のデバッグは、サーバー上の他の実行を停止させませんが、ロックを保持することで、他の接続が待機を強いられることがあります。

  • 接続を確立する前にクライアント環境とデバッガー環境に関する情報が必要SQL Serverので、既存の接続はデバッグできず、新しい接続のみが必要です。

上記の制限により、Transact-SQL コードと CLR コードは、実稼働サーバーではなくテスト サーバーでデバッグすることをお勧めします。

マネージド データベース オブジェクトのデバッグの概要

SQL Server のデバッグは、接続単位モデルに従います。 デバッガーは、デバッガーがアタッチされているクライアント接続のみに関係したアクティビティを検出してデバッグを実行することができます。 デバッガーの機能は、接続の種類による制限を受けないので、表形式のデータ ストリーム (TDS) 接続と HTTP 接続の両方をデバッグできます。 ただし、SQL Serverでは、既存の接続のデバッグは許可されません。 デバッグでは、サーバーで実行するルーチン内のすべての一般的なデバッグ機能をサポートします。 デバッガーとSQL Serverの間の相互作用は、分散コンポーネント オブジェクト モデル (COM) を介して行われます。

マネージド ストアド プロシージャ、関数、トリガー、ユーザー定義型、集計のデバッグの詳細とシナリオについては、Visual Studio ドキュメントの「SQL Server CLR Integration Database Debugging」トピックを参照してください。

リモート開発、デバッグ、開発に Visual Studio を使用するには、SQL Server インスタンスで TCP/IP ネットワーク プロトコルを有効にする必要があります。 サーバーで TCP/IP プロトコルを有効にする方法の詳細については、「 クライアント プロトコルの構成」を参照してください。

マネージド データベース オブジェクトをデバッグするには

  1. Microsoft Visual Studio を開き、新しいSQL Server プロジェクトを作成し、SQL Serverのインスタンス上のデータベースへの接続を確立します。

  2. 新しい型を作成します。 ソリューション エクスプローラーでプロジェクトを右クリックし、[追加] と [新しい項目] を選択します。[新しい項目の追加] ウィンドウで、[ストアド プロシージャ]、[ユーザー定義関数]、[ユーザー定義型]、[トリガー]、[集計]、または [クラス] を選択します。 新しい種類のソース ファイルの名前を指定し、[ 追加] をクリックします。

  3. テキスト エディターに新しい型のコードを追加します。 ストアド プロシージャの例のサンプル コードについては、後のセクションを参照してください。

  4. 型をテストするスクリプトを追加します。 ソリューション エクスプローラーで、TestScripts ディレクトリを展開し、Test.sql をダブルクリックして、既定のテスト スクリプト ソース ファイルを開きます。 デバッグするコードを呼び出すテスト スクリプトをテキスト エディターに追加します。 サンプル スクリプトについては、下記を参照してください。

  5. ソース コードに 1 つ以上のブレークポイントを配置します。 デバッグする関数またはルーチン内のテキスト エディターでコード行を右クリックし、[ ブレークポイント ] と [ブレークポイントの挿入] を選択 します。 ブレークポイントが追加され、コード行が赤で強調表示されます。

  6. [ デバッグ ] メニューの [ デバッグの開始 ] を選択して、プロジェクトをコンパイル、配置、テストします。 Test.sql のテスト スクリプトが実行され、マネージド データベース オブジェクトが呼び出されます。

  7. 命令ポインターを表す黄色い矢印がブレークポイントに表示されると、コードの実行が一時停止され、マネージド データベース オブジェクトのデバッグを開始できます。 [デバッグ] メニューからステップ オーバーして、命令ポインターを次のコード行に進めることができます。 [ローカル] ウィンドウは、命令ポインターによって現在強調表示されているオブジェクトの状態を確認するために使用されます。 変数は[ ウォッチ ]ウィンドウに追加できます。 監視される変数の状態は、変数が命令ポインターにより現在強調表示されているコード行にあるときだけでなく、デバッグ セッション全体で見ることができます。 [デバッグ] メニューの [続行] をクリックし、命令ポインターを次のブレークポイントに進めるか、ブレークポイントがこれ以上ない場合にはルーチンの実行を完了します。

次の例では、SQL Server バージョンを呼び出し元に返します。

C#

using System;  
using System.Data;  
using System.Data.SqlTypes;  
using System.Data.SqlClient;  
using Microsoft.SqlServer.Server;   
  
public class StoredProcedures   
{  
   [Microsoft.SqlServer.Server.SqlProcedure]  
   public static void GetVersion()  
   {  
   using(SqlConnection connection = new SqlConnection("context connection=true"))   
   {  
      connection.Open();  
      SqlCommand command = new SqlCommand("select @@version",  
                                           connection);  
      SqlContext.Pipe.ExecuteAndSend(command);  
      }  
   }  
}  

Visual Basic

Imports System  
Imports System.Data  
Imports System.Data.Sql  
Imports System.Data.SqlTypes  
Imports Microsoft.SqlServer.Server  
Imports System.Data.SqlClient  
  
Partial Public Class StoredProcedures   
    <Microsoft.SqlServer.Server.SqlProcedure> _  
    Public Shared Sub GetVersion()  
        Using connection As New SqlConnection("context connection=true")  
            connection.Open()  
            Dim command As New SqlCommand("SELECT @@VERSION", connection)  
            SqlContext.Pipe.ExecuteAndSend(command)  
        End Using  
    End Sub  
End Class  

上で定義した GetVersion ストアド プロシージャを呼び出すテスト スクリプトを次に示します。

EXEC GetVersion  

参照

CLR (共通言語ランタイム) 統合のプログラミング概念