偵錯工具命令和功能的限制
更新:2007 年 11 月
這個主題適用於:
版本 |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
Express 版 |
||||
Standard 版 |
||||
Pro/Team 版 |
表格圖例:
套用 |
|
不套用 |
|
預設隱藏的命令。 |
SQL 偵錯工具提供許多但並非全部通用的偵錯功能。SQL 偵錯可支援大多數的偵錯工具命令,例如設定中斷點和逐步執行。您可在 [區域變數] 視窗內檢視變數和傳遞之參數的數值。您也可將運算式拖曳到 [監看式] 視窗內,以便在逐步執行或執行程序時追蹤它們。
但是,由於 SQL Server 本身的某些基本特性,偵錯 SQL 會發生在差異很大的環境中。某些偵錯限制只適用於 T-SQL 偵錯或 SQL CLR 偵錯。其他限制適用於所有 SQL 偵錯。
SQL 偵錯的一般限制
不能使用 [編輯後繼續]。
不能在 [呼叫堆疊] 視窗中使用 [執行至游標處]。
不能在處理 SQL 陳述式時使用 [中斷]。
SQL PRINT 陳述式的輸出並不會出現在偵錯工具或 [資料庫輸出] 窗格內。
無法在 Visual Studio 中使用 [AutoRollback]。如果重現變更資料的錯誤,可能會因為資料變更而遺失錯誤。
有幾個視窗不是無法使用就是不提供任何功能。這些視窗是:
記憶體
暫存器
T-SQL 的反組譯碼
T-SQL 偵錯限制
不支援中斷點條件和篩選條件。
因為 SQL 並沒有真正的記憶體或暫存器,您不能使用 [記憶體] 視窗或 [暫存器] 視窗。
不能使用 [設定下一個陳述式] 來變更執行順序。必須遵循 SQL 程式碼中的流程控制和陳述式順序。您可以將控制陳述式圍繞 SQL 程式碼區塊,然後變更變數的值,做為一種解決方法。
無法從 T-SQL 物件內部存取任何 .Net Framework 變數或屬性。
隨即顯示 [即時運算] 視窗,但是無法使用這個視窗執行任何有用的動作,例如將變數設定為值或查詢資料庫。
有幾個視窗不是無法使用就是不提供任何功能。這些視窗是:
反組譯碼
執行緒
暫存器
處理序
模組
SQL CLR 偵錯限制
每個伺服器只能發生一個 SQL CLR 偵錯工作階段,因為在進行任何 SQL CLR 偵錯時,會凍結所有 SQL CLR 程式碼的執行。基於這個原因,偵錯工具使用者必須是 SQL 系統管理員,以便執行 SQL CLR 偵錯。
SQL CLR 偵錯永遠不應該在實際執行伺服器上進行。SQL CLR 偵錯是有風險的:SQL CLR 偵錯工具可以讀取和寫入處理序記憶體,並且可以在伺服器處理序中執行任意程式碼。這會導致停止伺服器上所有的 Managed 執行緒。並且當您結束偵錯工作階段時,SQL Server 可能會中止。
在 CLR SQL 物件內,無法存取像是 @@ROWCOUNT 的全域 SQL 變數。
在 Visual Studio SQL Server 專案中,您只能夠將 .NET Framework 其中一部分的類別庫加入參考,並不能隨意參考任何組件。