SQL Server 2000 透過查詢分析器偵錯,SQL Server 2005 將偵錯功能整合至 **Visual Studio IDE** (Professional/Team System 版) 與 **SQL Server Management Studio (SSMS)**。本文詳細說明三種偵錯模式、本地/遠端偵錯權限設定、斷點操作、變數監視、輸出視窗解讀,以及遠端偵錯的關鍵 Windows 帳號同步需求。
| 模式 | 啟動方式 | 適用場景 |
|---|---|---|
| 直接資料庫偵錯 | SSMS/VS 伺服器總管 → 右鍵預存程序 → 單步執行預存程序 | 獨立測試預存程序邏輯、參數驗證、無需應用程式上下文 |
| 應用程式偵錯 | 在預存程序設定斷點 → 啟動 ASP.NET/WinForm 應用偵錯 (F5) → 應用呼叫預存程序時中斷 | 端到端偵錯、驗證參數傳遞、交易行為、應用程式邏輯與資料庫互動 |
| SQL Server 專案偵錯 | VS 建立 SQL Server 專案 → 匯入/撰寫 T-SQL → 專案層級偵錯 (F5) | 資料庫專案開發、版控、單元測試、部署腳本驗證 |
版本限制:Visual Studio **Professional / Team System / Enterprise** 才支援資料庫偵錯;Visual Web Developer Express / Standard / Community (早期版) 不支援**。
.\SQLEXPRESS)。DoThings) → **單步執行預存程序**。@CategoryID = 1) → 確定。@CategoryID, @AvgPrice 等變數觀察值變化。核心原則:**啟動 Visual Studio 的 Windows 帳號,必須與連接遠端 SQL Server 的登入帳號完全相同,且該帳號必須是遠端 SQL Server 的 sysadmin 固定伺服器角色成員。**
DOMAIN\DebugUser 或本機 DebugUser (雙邊同名、同密碼)。DOMAIN\DebugUser (Windows 驗證)。DebugUser 登入 Windows,再開啟 VS。runas /user:DOMAIN\DebugUser "devenv.exe" 啟動 VS。135 (RPC Endpoint Mapper) + 445 (SMB) + 動態 RPC 埠範圍 (或設定固定埠)。| 視窗 | 開啟方式 | 用途 |
|---|---|---|
| 呼叫堆疊 | 偵錯 → 視窗 → 呼叫堆疊 (Ctrl+Alt+C) | 查看巢狀呼叫層級 (預存程序 → 觸發器 → 函數) |
| 區域變數 | 偵錯 → 視窗 → 區域變數 (Ctrl+Alt+V, L) | 自動顯示目前作用域所有 T-SQL 變數、參數、暫存表 |
| 監視 1-4 | 偵錯 → 視窗 → 監視 → 監視 1 (Ctrl+Alt+W, 1) | 手動輸入運算式 (如 @Total + @Tax, SELECT COUNT(*) FROM #Temp) |
| 中斷點 | 偵錯 → 視窗 → 中斷點 (Ctrl+Alt+B) | 管理所有中斷點 (條件、命中計數、篩選器) |
| 輸出 | 檢視 → 輸出 (Ctrl+Alt+O) | PRINT 訊息、RAISERROR、偵錯器事件 |
| 即時運算 | 偵錯 → 視窗 → 即時運算 (Ctrl+Alt+I) | 即時執行 T-SQL 片段查詢狀態 |
@RowCount > 1000 或 @Status = 'Error',僅滿足條件時中斷。| 現象 | 原因 | 解決 |
|---|---|---|
| 右鍵預存程序無「單步執行」選項 | VS 版本不支援 (Express/Standard/Community 早期版) / 未安裝 SQL Server Data Tools (SSDT) | 升級 VS Professional+ / 安裝 SSDT |
| 遠端偵錯「無法連線偵錯器」 | 帳號不符 / 非 sysadmin / 防火牆阻擋 RPC / 遠端偵錯器 (msvsmon) 未啟動 | 核對帳號同步、sysadmin、防火牆、遠端執行 msvsmon.exe |
| 斷點呈空心圓「無法繫結」 | 資料庫專案與部署版本不一致 / PDB 符號檔不匹配 | 重新部署專案 / 確認 SSDT 部署設定「產生偵錯資訊」 |
| 監視視窗顯示「無法評估運算式」 | 變數超出作用域 / 名稱拼寫錯誤 | 確認變數在目前堆疊幀作用域內、名稱含 @ |