設定和啟動 Transact-SQL 偵錯工具

在您開啟 Database Engine 查詢編輯器視窗之後,就可以啟動 Transact-SQL 偵錯工具。然後,您可以在偵錯模式中執行 Transact-SQL 程式碼,直到停止偵錯工具為止。您可以透過設定選項來自訂偵錯工具的執行方式,以便符合您的需求。

設定 Transact-SQL 偵錯工具

Transact-SQL 偵錯工具同時包含伺服器端和用戶端元件。伺服器端偵錯工具元件會與每個 SQL Server 2008Database Engine 執行個體一起安裝。用戶端元件則會在您安裝 SQL Server 2008 用戶端工具時安裝。

當 SQL Server Management Studio 與 SQL Server Database Engine 執行個體在同一部電腦上執行時,沒有任何執行 Transact-SQL 偵錯工具的組態需求。不過,當 SQL Server Management Studio 與 Database Engine 執行個體在不同的電腦上執行時,若要執行 Transact-SQL 偵錯工具,您就必須使用這兩部電腦上的 [Windows 防火牆] 控制台應用程式來啟用程式和通訊埠例外。

在執行 Database Engine 執行個體的電腦上,於 [Windows 防火牆] 中指定下列資訊:

  • 將 TCP 通訊埠 135 加入至例外清單。

  • 將程式 sqlservr.exe 加入至例外清單。根據預設,sqlservr.exe 安裝在 C:\Program Files\Microsoft SQL Server\MSSQL10.InstanceName\MSSQL\Binn 中,其中 InstanceName 是 MSSQLSERVER (若為預設執行個體),而且它是任何具名執行個體的執行個體名稱。

  • 如果網域原則要求透過 IPsec 完成網路通訊,您也必須將 UDP 通訊埠 4500 和 UDP 通訊埠 500 加入至例外清單。

在執行 SQL Server Management Studio 的電腦上,於 [Windows 防火牆] 中指定下列資訊:

  • 將 TCP 通訊埠 135 加入至例外清單。

  • 將程式 ssms.exe (SQL Server Management Studio) 加入至例外清單。根據預設,ssms.exe 安裝在 C:\Program Files\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE 中。

啟動和停止偵錯工具

啟動 Transact-SQL 偵錯工具的需求如下:

  • SQL Server Management Studio 必須在屬於系統管理員 (sysadmin) 固定伺服器角色成員的 Windows 帳戶底下執行。

  • 您必須使用屬於系統管理員 (sysadmin) 固定伺服器角色成員的 Windows 驗證或 SQL Server 驗證登入來連接 Database Engine 查詢編輯器視窗。

  • Database Engine 查詢編輯器視窗必須連接至 SQL Server 2008Database Engine 的執行個體。當 [查詢編輯器] 視窗連接至處於單一使用者模式下的執行個體時,您就無法執行偵錯工具。

我們建議您在測試伺服器而非實際伺服器上偵錯 Transact-SQL 程式碼,原因如下:

  • 偵錯是具有高度權限的作業。因此,只有系統管理員 (sysadmin) 固定伺服器角色的成員才能在 SQL Server 中偵錯。

  • 在您調查許多 Transact-SQL 陳述式的作業時,偵錯工作階段通常會執行一段很長的時間。工作階段所取得的鎖定 (例如更新鎖定) 可能會長時間保留,直到工作階段結束,或者交易已認可或回復為止。

一旦啟動 Transact-SQL 偵錯工具,就會讓 [查詢編輯器] 視窗進入偵錯模式。當 [查詢編輯器] 視窗進入偵錯模式時,偵錯工具就會在第一行程式碼上暫停。然後,您就可以逐步執行程式碼、在特定的 Transact-SQL 陳述式上暫停執行作業,以及使用偵錯工具視窗來檢視目前的執行狀態。您可以透過按一下 [查詢] 工具列上的 [偵錯] 按鈕,或按一下 [偵錯] 功能表上的 [開始偵錯],啟動偵錯工具。

[查詢編輯器] 視窗會保持在偵錯模式中,直到 [查詢編輯器] 視窗中的最後一個陳述式完成或是您停止偵錯模式為止。您可以使用下列任何一種方法來停止偵錯模式和陳述式執行:

  • [偵錯] 功能表上,按一下 [停止偵錯]

  • [偵錯] 工具列上,按一下 [停止偵錯] 按鈕。

  • [查詢] 功能表上,按一下 [取消執行查詢]

  • [查詢] 工具列上,按一下 [取消執行查詢] 按鈕。

您也可以按一下 [偵錯] 功能表上的 [中斷所有連結],藉以停止偵錯模式,並且允許其餘 Transact-SQL 陳述式完成執行。

控制偵錯工具

您可以使用下列功能表命令、工具列和快速鍵來控制 Transact-SQL 偵錯工具的運作方式:

  • [偵錯] 功能表和 [偵錯] 工具列。在開啟的 [查詢編輯器] 視窗中放置焦點之前,[偵錯] 功能表和 [偵錯] 工具列是處於非使用中狀態。此外,它們會維持使用中狀態,直到目前的專案關閉為止。

  • 偵錯工具鍵盤快速鍵。

  • 查詢編輯器快速鍵功能表。當您在 [查詢編輯器] 視窗中,以滑鼠右鍵按一下某一行時,就會顯示快速鍵功能表。當 [查詢編輯器] 視窗處於偵錯模式時,快速鍵功能表就會顯示套用至選取行或字串的偵錯工具命令。

  • 偵錯工具所開啟之視窗 (例如 [監看式][中斷點] 視窗) 中的主要項目和內容命令。

下表將顯示偵錯工具功能表命令、工具列按鈕和鍵盤快速鍵。

偵錯功能表命令

編輯器快速鍵命令

工具列按鈕

鍵盤快速鍵

動作

視窗/中斷點

無法使用

中斷點

CTRL+ALT+B

顯示您可以用來檢視和管理中斷點的 [中斷點] 視窗。

視窗/監看式/監看式 1

無法使用

中斷點/監看式/監看式 1

CTRL+ALT+W、1

顯示 [監看式 1] 視窗。

視窗/監看式/監看式 2

無法使用

中斷點/監看式/監看式 2

CTRL+ALT+W、2

顯示 [監看式 2] 視窗。

視窗/監看式/監看式 3

無法使用

中斷點/監看式/監看式 3

CTRL+ALT+W、3

顯示 [監看式 3] 視窗。

視窗/監看式/監看式 4

無法使用

中斷點/監看式/監看式 4

CTRL+ALT+W、4

顯示 [監看式 4] 視窗。

視窗/區域變數

無法使用

中斷點/區域變數

CTRL+ALT+V、L

顯示 [區域變數] 視窗。

視窗/呼叫堆疊

無法使用

中斷點/呼叫堆疊

CTRL+ALT+C

顯示 [呼叫堆疊] 視窗。

視窗/執行緒

無法使用

中斷點/執行緒

CTRL+ALT+H

顯示 [執行緒] 視窗。

繼續

無法使用

繼續

ALT+F5

執行到下一個中斷點。在處於偵錯模式的 [查詢編輯器] 視窗中放置焦點之前,[繼續] 是處於非使用中狀態。

開始偵錯

無法使用

開始偵錯

ALT+F5

讓 [查詢編輯器] 視窗進入偵錯模式,並且執行到第一個中斷點。如果您在處於偵錯模式的 [查詢編輯器] 視窗中放置焦點,[開始偵錯] 就會由 [繼續] 所取代。

全部中斷

無法使用

全部中斷

CTRL+ALT+BREAK

Transact-SQL 偵錯工具不會使用這項功能。

停止偵錯

無法使用

停止偵錯

SHIFT+F5

讓 [查詢編輯器] 視窗離開偵錯模式,並且返回一般模式。

中斷所有連結

無法使用

無法使用

無法使用

停止偵錯模式,但在 [查詢編輯器] 視窗中執行其餘陳述式。

逐步執行

無法使用

逐步執行

F11

執行下一個陳述式,而且如果下一個陳述式會執行預存程序、觸發程序或函數,就會在偵錯模式中開啟新的 [查詢編輯器] 視窗。

不進入函式

無法使用

不進入函式

F10

[逐步執行] 相同,但是不會偵錯任何函數、預存程序或觸發程序。

跳離函式

無法使用

跳離函式

SHIFT+F11

執行觸發程序、函數或預存程序中的其餘程式碼,但是不會針對任何中斷點暫停。當控制權返回呼叫模組的程式碼時,就會繼續進行一般偵錯模式。

無法使用

執行至資料指標處

無法使用

CTRL+F10

執行所有程式碼 (從上一個停止位置到目前的資料指標位置),但是不會在任何中斷點上停止。

快速監看式

快速監看式

無法使用

CTRL+ALT+Q

顯示 [快速監看式] 視窗。

切換中斷點

中斷點/插入中斷點

無法使用

F9

將中斷點放置在目前或選取的 Transact-SQL 陳述式上。

無法使用

中斷點/刪除中斷點

無法使用

無法使用

從選取行中刪除中斷點。

無法使用

中斷點/停用中斷點

無法使用

無法使用

停用選取行的中斷點。雖然中斷點會保留在程式碼行上,但是在重新啟用之前,它將不會停止執行作業。

無法使用

中斷點/啟用中斷點

無法使用

無法使用

啟用選取行的中斷點。

刪除所有中斷點

無法使用

無法使用

CTRL+SHIFT+F9

刪除所有中斷點。

停用所有中斷點

無法使用

無法使用

無法使用

停用所有中斷點。

無法使用

加入監看式

無法使用

無法使用

將選取的運算式加入至 [監看式] 視窗。