次の方法で共有


チュートリアル : SQL CLR のユーザー定義スカラー関数のデバッグ

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

エディション

Visual Basic

C#

C++

Web Developer

Express

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

[標準]

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

Pro/Team

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

この例では、SQL Server 共通言語ランタイム (SQL CLR) のユーザー定義関数 (UDF: User Defined Function) をデバッグする方法について説明します。 ここでは、Adventureworks サンプル データベースに新しい SQL CLR ユーザー定義関数を作成します。

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

注意

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

SQL CLR ユーザー定義スカラー関数をデバッグするには

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

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

  3. SELECT ステートメントに含めて、関数をテストするスクリプトを追加します。 ソリューション エクスプローラーTestScripts ディレクトリを右クリックし、[テスト スクリプトの追加] をクリックして、後述する 2 つ目のサンプルにあるコードを挿入します。 ファイルに CallOrderCount.sql と名前を付けて保存します。 ファイル名を右クリックし、[既定のデバッグ スクリプトの設定] をクリックします。

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

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

    1. [デバッグ] メニューの [ステップ イン] を使用して、SqlCommand をインスタンス化するステートメントの次まで、ステップ実行します。

    2. [ローカル] ウィンドウで、変数 sqlComm を開きます。これは SqlCommand であるため、メンバーを確認します。

    3. [デバッグ] メニューの [ステップ イン] をクリックして、関数の 1 行をステップ実行します。 メンバー sqlComm.CommandText がインスタンス化されていることに注意してください。

    4. テキスト エディターで、sqlComm を [ウォッチ] ウィンドウの任意の場所にドラッグします。 ウォッチする変数のリストに追加されます。

    5. [ステップ イン] をもう一度クリックします。[ダイナミック T-SQL] という新しいウィンドウが開き、実行される SQL ステートメントが表示されます。

    6. [ステップ イン] をクリックすると、ステートメントが実行され、関数に戻ります。

    7. [続行] をもう一度クリックすると、2 つ目の [ダイナミック T-SQL] ウィンドウが開き、関数値を戻すコードが表示されます。

    8. 関数のデバッグを終了するには、もう一度 [続行] をクリックします。

使用例

これは、関数の作成に必要なコードです。

using System;
using System.Data.SqlClient;
using Microsoft.SqlServer.Server;
 
 
public partial class UserDefinedFunctions
{
    [Microsoft.SqlServer.Server.SqlFunction(DataAccess = DataAccessKind.Read)]
    public static int OrderCount()
    {
        using (SqlConnection conn = new SqlConnection("context connection=true"))
            {
                  conn.Open();
                  SqlCommand cmd = new SqlCommand();
                  cmd.Connection = conn;
                  cmd.CommandText = "SELECT 42";
                  
                  //cmd = new SqlCommand("SELECT 42",conn);
 
                  int result = (int)cmd.ExecuteScalar();
                  return result;
            }
    }
};

これは、関数を呼び出すテスト スクリプトです。

SELECT dbo.OrderCount()

参照

処理手順

方法: 共通言語ランタイム統合機能を使用して SQL Server のユーザー定義関数を作成および実行する