共用方式為


逐步解說:偵錯 SQL CLR 使用者定義的純量函式

這個主題適用於:

版本

Visual Basic

C#

C++

Web Developer

Express

標題不適用於 標題不適用於 標題不適用於 標題不適用於

Standard 版

標題不適用於 標題不適用於 標題不適用於 標題不適用於

Pro/Team 版

標題適用於 標題適用於 標題適用於 標題適用於

這個範例將示範如何偵錯 SQL Server Common Language Runtime (SQL CLR) 使用者定義函式 (UDF)。 它會在 AdventureWorks 範例資料庫中建立新的 SQL CLR 使用者定義函式。

當您嘗試偵錯 SQL CLR 物件時,如果出現「已由使用者取消」訊息,就必須手動設定用來執行 Visual Studio 的電腦以及正在執行 SQL Server 的電腦。 如需詳細資訊,請參閱HOW TO:設定您的電腦以啟用 Transact-SQL 和 SQL CLR 偵錯

注意事項注意事項

根據您目前使用的設定或版本,您所看到的對話方塊與功能表指令可能會與 [說明] 中描述的不同。 若要變更設定,請從 [工具] 功能表中選取 [匯入和匯出設定]。 如需詳細資訊,請參閱使用設定

若要偵錯 SQL CLR 使用者定義的純量函式:

  1. 在新的 SQL CLR 專案中,建立與 AdventureWorks 範例資料庫的連接。 如需詳細資訊,請參閱How to: Connect to a Database

  2. 使用下列第一個範例區段中的程式碼建立新函式,並將其命名為 OrderCount.cs。 如需詳細資訊,請參閱How to: Develop with the SQL Server Project Type

  3. 藉由將指令碼包含在 SELECT 陳述式中,加入能夠測試函式的指令碼。 在 [方案總管] 中,以滑鼠右鍵按一下 [TestScripts] 目錄,再按 [加入測試指令碼],然後插入底下第二個範例區段中的程式碼。 使用名稱 CallOrderCount.sql 來儲存檔案。 在檔名上按一下滑鼠右鍵,並選擇 [設定為預設偵錯指令碼]。

  4. 在 OrderCount.cs 中執行個體化 SqlCommand 的那一行中置放中斷點,然後在 [偵錯] 功能表上,按一下 [啟動],對專案進行編譯、部署和單元測試。 當中斷點上出現以黃色箭頭表示的指令指標時,即表示您正在偵錯函式。

  5. 嘗試不同的偵錯功能。

    1. 使用 [偵錯] 功能表的 [逐步執行],逐步執行將 SqlCommand 執行個體化的陳述式。

    2. 在 [區域變數] 視窗中,開啟變數 sqlComm (其為 SqlCommand),然後檢視該成員。

    3. 在 [偵錯] 功能表上按一下 [逐步執行],逐步執行函式中的某一行。 請注意,sqlComm.CommandText 成員已執行個體化。

    4. 在 [文字編輯器] 中,將 sqlComm 拖曳至 [監看式] 視窗中的任何位置。 該變數現在將加入被監看變數的清單內。

    5. 再按 [逐步執行],然後注意標記為 [動態 T-SQL] 的新視窗會開啟,顯示將要執行的 SQL 陳述式。

    6. 選擇 [逐步執行] 執行該陳述式,然後返回函式。

    7. 再按一次 [繼續],然後注意開啟的第二個 [動態 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()

請參閱

工作

HOW TO:使用 Common Language Run-time 整合建立和執行 SQL Server 使用者定義函式