這個主題適用於:
版本 |
Visual Basic |
C# |
C++ |
Web Developer |
|---|---|---|---|---|
Express |
![]() |
![]() |
![]() |
![]() |
Standard 版 |
![]() |
![]() |
![]() |
![]() |
Pro/Team 版 |
![]() |
![]() |
![]() |
![]() |
這個範例將示範如何偵錯 SQL CLR 觸發程序。 它會使用 AdventureWorks 範例資料庫中的 [Contact] 資料表,這個資料庫是使用 SQL Server 2005 安裝的資料庫之一。 範例會在 [Contact] 資料表建立新的插入 SQL CLR 觸發程序,並且逐步執行它。
當您嘗試偵錯 SQL CLR 物件時,如果出現「已由使用者取消」訊息,就必須手動設定用來執行 Visual Studio 的電腦以及正在執行 SQL Server 的電腦。 如需詳細資訊,請參閱HOW TO:設定您的電腦以啟用 Transact-SQL 和 SQL CLR 偵錯。
注意事項 |
|---|
根據您目前使用的設定或版本,您所看到的對話方塊與功能表指令可能會與 [說明] 中描述的不同。 若要變更設定,請從 [工具] 功能表中選取 [匯入和匯出設定]。 如需詳細資訊,請參閱使用設定。 |
若要偵錯 SQL CLR 觸發程序:
在新的 SQL CLR 專案中,建立與 [AdventureWorks] 資料庫的連接。 如需詳細資訊,請參閱How to: Connect to a Database。
使用下列第一個範例區段中的程式碼建立新的觸發程序,並將其命名為 iContact.cs。 如需詳細資訊,請參閱How to: Develop with the SQL Server Project Type。
加入會引發觸發程序以便進行測試的指令碼。 在 [方案總管] 中,以滑鼠右鍵按一下 [TestScripts] 目錄,再按 [加入測試指令碼],然後插入底下第二個範例區段中的程式碼。 使用名稱 truContact.sql 儲存檔案。 以滑鼠右鍵按一下這個檔案名稱,再按 [設定為預設偵錯指令碼]。
在 iContact.cs 中設定中斷點,然後在 [偵錯] 功能表上按一下 [啟動],對專案進行編譯、部署和單元測試。 當中斷點上出現以黃色箭頭表示的指令指標時,即表示您正在偵錯觸發程序。
嘗試不同的偵錯功能。
逐步執行會將 SqlTriggerContext 執行個體化的陳述式。
開啟 [區域變數] 視窗。 請注意,您可以開啟 triggContext 變數,其為 SqlTriggerContext,並且檢視該成員。 如需詳細資訊,請參閱HOW TO:使用偵錯工具變數視窗。
注意事項伺服器可能不會反映偵錯工具視窗內的變數值變更。 如需詳細資訊,請參閱 SQL 偵錯限制。
從 [偵錯] 功能表中選擇 [逐步執行],逐步執行預存程序中的某一行。 請注意,執行已執行個體化 SqlPipe 型別的 sqlP 變數值。
開啟 [監看式] 視窗。 將 sqlP 變數拖曳至 [監看式] 視窗中的任何位置。 該變數現在將加入被監看變數的清單內。 如需詳細資訊,請參閱HOW TO:使用偵錯工具變數視窗。
注意事項您也可在 [監看式] 視窗內編輯變數的值。
在 [文字編輯器] 中,以滑鼠右鍵按一下最後一行,然後按一下 [插入中斷點]。
在 [偵錯] 功能表中按一下 [繼續],偵錯工具將會在新的中斷點之前,執行程式碼。
再按一次 [繼續],以完成觸發程序的偵錯。 [輸出] 視窗會顯示訊息,說明已成功部署觸發程序,並且顯示在 truContact.sql 檔中執行命令的結果。
範例
建立這個範例中使用的觸發程序時,需要使用下列程式碼。
using System;
using System.Data;
using System.Data.Sql;
using Microsoft.SqlServer.Server;
public partial class Triggers
{
// Enter existing table or view for the target and uncomment the attribute line.
[Microsoft.SqlServer.Server.SqlTrigger (Name="Trigger1", Target="primes", Event="FOR UPDATE")]
public static void Trigger1()
{
SqlTriggerContext triggContext = SqlContext.TriggerContext;
SqlPipe sqlP = SqlContext.Pipe;
sqlP.Send("primes inserted!");
}
}
以下是會引發觸發程序的測試指令碼。
UPDATE Person.Contact SET MiddleName = 'A' WHERE ContactID = 8
.gif)
.gif)