SQL 偵錯限制
更新:2007 年 11 月
這個主題適用於:
版本 |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
Express 版 |
||||
Standard 版 |
||||
Pro/Team 版 |
表格圖例:
套用 |
|
不套用 |
|
預設隱藏的命令。 |
SQL 偵錯有數個一般限制,將在本章節中說明。
多層 SQL 偵錯
當偵錯多層應用程式時,您無法使用 [逐步執行] 從應用程式層 (C#、Visual Basic 或 C++) 中的程式碼,逐步執行至 SQL Server 2005 (T-SQL 或 SQL/CLR) 的程式碼。而是在預存程序程式碼中設定中斷點,然後按 [繼續] (F5) 執行在中斷點之前的程式碼。您也可使用 [執行至游標處] 來到達您要的位置,而不需使用中斷點。請注意,在 SQL Server 2005 層中,您可以在 T-SQL 和 SQL/CLR 程式碼之間往前或往後逐步執行。
也不能以其他方式逐步執行,例如從預存程序程式碼往後執行至呼叫預存程序的程式碼層。如果您想要在返回應用程式層之後繼續偵錯,請在應用程式呼叫預存程序的程式碼後設定中斷點。
連接共用是一種改善效能的技術。當應用程式關閉其資料連接時,SQL Server 連接將放在集區內,而非完全關閉,以便稍後當應用程式嘗試重新開啟連接時可重複使用。不過,當連接經由連接共用重新建立時,SQL 偵錯並不會重新啟用。
偵錯時應該暫時停用連接共用。若要執行這個步驟,請在用來連接至 SQL Server 的連接字串中設定 "Pooling=false"。當偵錯完成時,請從連接字串移除這個屬性 (Attribute),然後根據預設將會啟用共用。
Managed 應用程式可使用 SQL Server 的 .NET Framework 資料提供者連接至 SQL Server 資料來源,其效能將比使用 OLE DB 或 ODBC 連接來得好。您可在相同的偵錯工具工作階段 (Session) 中,同時進行 Managed 偵錯和 SQL 偵錯。
如果 Managed 應用程式正在執行,並且您使用偵錯工具附加至應用程式,則有機會選擇要進行的偵錯種類。如果想要進行 SQL 偵錯,則必須選擇 SQL 偵錯,如果想要偵錯 SQL/CLR 程式碼,則必須也要指定 Managed 偵錯。
您可在連接至執行的應用程式之後進行 SQL 偵錯。不過請注意,只有在您完成 [附加] 之後所建立的資料庫連接才能進行偵錯。因此,如果應用程式花很長的時間呼叫預存程序,您就無法附加至呼叫預存程序的連接,而是只能在連接至應用程式後,附加至呼叫預存程序的新連接。
若您正透過以 OleDbDataAdapter 建立的連線來進行偵錯,遇到中斷點之後等待太長的時間將導致連接逾時。當您嘗試在此逾時之後繼續偵錯 (例如選擇 [偵錯] 功能表內的 [繼續]) 時,偵錯工具將會結束 (而非繼續執行)。這是預期的行為。偵錯工具之所以會結束,是因為 OleDbDataAdapter 不像 SqlDataAdapter,它並不會在逾時發生時擲回例外狀況。若要解決此問題,請在使用 OleDbDataAdapter 時,將逾時值設成較大的數值。
如需替 .NET Framework 資料提供者設定逾時值的詳細資訊,請參閱《.NET Framework 類別庫》文件內的 OleDbCommand.CommandTimeout 屬性和 SqlCommand.CommandTimeout 屬性。
如需 MDAC 技術的最新消息,請參閱 Microsoft Universal Data Access 網站 https://msdn2.microsoft.com/zh-tw/data/default.aspx。
其他限制
必須引發觸發程序才能偵錯:無法直接偵錯觸發程序。而是在會引發觸發程序的預存程序中啟動偵錯。
在執行階段偵錯中,一系列的 Subselect (例如在等位中) 會填滿 Netbuffer。這會導致原本正常執行的程式碼在偵錯期間中止。若要取得更多資料,請使用 RecordSet.MoveNext 和 RecordSet.NextRecordSet。
如果預存程序的名稱中包含了引號,您可能會看到一個偵錯工具的錯誤訊息。如需詳細資訊,請參閱所偵錯程序的名稱中包含引號的錯誤。
快取的數值並不會自動修改。您不能一直期待您對 SQL 解譯器所快取的區域變數或參數所做的修改,會在您逐步執行 SQL 陳述式的時間框架中生效。雖然您可能已經修改過該數值,但它可能永不會再被檢查。您不能強迫重新整理快取的數值。快取的數值之所以存在,是因為 SQL Server 的執行計劃決定某些變數的數值並不會在每個陳述式執行或參考時動態地載入。如需詳細資訊,請至 SQL Server 2005 文件中搜尋 "SHOWPLAN"。
您不能在偵錯預存程序的同時附加至原生 SQL Server 處理序 (Process)。