共用方式為


偵錯 CLR 資料庫物件

SQL Server 支援在資料庫中偵錯 Transact-SQL 及通用語言執行平台 (CLR) 物件。 在 SQL Server 中偵錯的關鍵在於容易設定和使用,以及 SQL Server 偵錯程式與 Microsoft Visual Studio 偵錯程式的整合。 此外,偵錯可跨語言運作。 使用者可以順暢地從 Transact-SQL 進入 CLR 物件,反之亦然。 SQL Server Management Studio 中的 Transact-SQL 調試程式無法用來偵錯 Managed 資料庫物件,但您可以使用 Visual Studio 中的調試程式來偵錯物件。 Visual Studio 中的 Managed 資料庫物件偵錯支援所有常見的偵錯功能,例如在伺服器上執行的例程內的「逐步執行」和「逐步執行」語句。 偵錯工具可在偵錯期間,設定中斷點、檢查呼叫堆疊,檢查變數,以及修改變數值。 請注意,Visual Studio .NET 2003 無法用於 CLR 整合程式設計或偵錯。 SQL Server 包含預安裝的 .NET Framework,而 Visual Studio .NET 2003 無法使用 .NET Framework 2.0 元件。

如需使用 Visual Studio 偵錯 Managed 程式代碼的詳細資訊,請參閱 Visual Studio 檔中的<偵錯 Managed 程式代碼>主題。

偵錯許可權和限制

偵錯是一種高度授權的作業,因此在 SQL Server 中只有 sysadmin 固定伺服器角色的成員才能執行此作業。

偵錯時會套用下列限制:

  • 偵錯 CLR 常式一次只限於一個偵錯工具執行個體。 此限制適用,因為當叫用斷點並執行中斷點時,所有CLR程式碼執行都會凍結,直到調試程式從斷點前進為止。 但是,您可以在其他連接中繼續偵錯 Transact-SQL。 雖然 Transact-SQL 偵錯不會凍結伺服器上的其他執行,但它可能會因為持有鎖定而造成其他連線等候。

  • 現有的連接無法偵錯,只有新的連線,因為 SQL Server 需要客戶端和調試程式環境的相關信息,才能建立連線。

由於上述限制,建議您在測試伺服器上偵錯 Transact-SQL 和 CLR 程序代碼,而不是在生產伺服器上進行偵錯。

偵錯 Managed 資料庫物件的概觀

SQL Server 中的偵錯遵循基於每個連接模型。 調試程式只能偵測並偵錯活動至其所附加的用戶端連線。 由於調試程式的功能不受連線類型限制,因此可以偵錯表格式數據流 (TDS) 和 HTTP 連線。 不過,SQL Server 不允許偵錯現有的連線。 偵錯支援在伺服器上執行的常式內的所有通用偵錯功能。 偵錯工具與 SQL Server 透過分散式元件物件模型 (COM) 進行互動。

如需偵錯 Managed 預存程式、函式、觸發程式、使用者定義類型和匯總的詳細資訊和案例,請參閱 Visual Studio 檔中的<SQL Server CLR Integration Database 偵錯>主題。

SQL Server 實例必須啟用 TCP/IP 網路協定,才能使用 Visual Studio 進行遠端開發、偵錯及開發。 如需在伺服器上啟用 TCP/IP 通訊協定的詳細資訊,請參閱設定用戶端通訊協定

偵錯 Managed 資料庫物件

  1. 開啟 Microsoft Visual Studio、建立新的 SQL Server 專案,以及建立 SQL Server 實例上資料庫的連線。

  2. 建立新的類型。 在 方案總管中,以滑鼠右鍵按兩下項目,選取 [ 新增 ] 和 [ 新增專案...]。 從 [ 新增專案] 視窗中,選取 [ 預存程式]、 User-Defined 函數、 User-Defined [類型]、 [觸發程式]、[ 匯總] 或 [類別]。 指定新類型來源檔案的名稱,然後按兩下 [ 新增]。

  3. 將新類型的程式碼加入至文字編輯器。 如需範例預存程式的範例程式代碼,請參閱本主題稍後的 章節。

  4. 新增測試類型的腳本。 在 [方案總管] 中,展開 TestScripts 目錄按兩下 Test.sql 開啟預設測試腳本來源檔案。 將測試腳本新增至文本編輯器,其中一個叫用要偵錯的程序代碼。 如需範例腳本,請參閱下文。

  5. 在原始程式碼中放置一或多個中斷點。 以滑鼠右鍵按下文字編輯器中的程式代碼行、您要偵錯的函式或例程內,然後選取 [ 斷點 ] 和 [ 插入斷點]。 中斷點隨即加入,程式碼行則以紅色反白顯示。

  6. 在 [偵錯]功能表中,請選取 [開始偵錯],對該專案進行編譯、部署和測試。 將會執行Test.sql中的測試腳本,並叫用Managed資料庫物件。

  7. 當指定指令指標的黃色箭號出現在斷點程式代碼執行暫停時,您可以開始對 Managed 資料庫對象進行偵錯。 您可以從 [偵錯] 功能表逐步執行,將指令指標前進到下一行程序代碼。 [ 局部變數 ] 視窗可用來觀察指令指標目前反白顯示的對象狀態。 變數可以新增至 [ 監看 式] 視窗。 整個偵錯會話中都可以觀察監看變數的狀態,而不只是當變數位於指令指標目前醒目提示的程式代碼行時。 從 [偵錯] 功能選取 [繼續],將指令指標前進到下一個斷點,或如果沒有其他斷點,則完成例程的執行。

範例

下列範例會將 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  

另請參閱

Common Language Runtime (CLR) 整合程式設計概念