逐步解說:偵錯延伸預存程序
這個主題適用於:
Visual Studio Ultimate |
Visual Studio Premium |
Visual Studio Professional |
Visual Studio Express |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
提示
延伸預存程序已被取代。雖然 ASP.NET 仍因回溯相容性而支援延伸預存程序,但未來的版本中將會移除此項支援。
引進延伸預存程序是為了執行在 Transact-SQL 中無法執行的動作,例如存取檔案系統、讀取登錄等。既然可以透過撰寫 SQL CLR 程序來執行上述動作,就沒有必要再撰寫延伸預存程序。強烈建議不要撰寫新的延伸預存程序,並且考慮以同等但更安全的 SQL CLR 預存程序取代現有的延伸預存程序。
延伸預存程序是以 C++ 或其他任何語言撰寫的 DLL,不是以 SQL 寫成的。因此,偵錯延伸預存程序就像偵錯該語言的任何 DLL。
提示
延伸預存程序通常會以原生 C++ 撰寫,缺乏 Managed 程式碼所能提供的保護。測試延伸程序時應特別小心,因為錯誤可能會造成 SQL Server 損毀。為避免潛在的資料遺失或其他問題,請勿在實際執行伺服器上偵錯延伸預存程序。如需詳細資訊,請參閱《ASP.NET 線上叢書》。
根據您目前使用的設定或版本,您所看到的對話方塊與功能表指令可能會與 [說明] 中描述的不同。若要變更設定,請從 [工具] 功能表中選取 [匯入和匯出設定]。如需詳細資訊,請參閱 Visual Studio Settings。
偵錯延伸預存程序
從偵錯建置延伸預存程序 DLL 開始。您還需要呼叫您要偵錯之延伸預存程序的應用程式。如果您沒有現成的應用程式,可以執行下列其中一個動作:
建立 Visual Studio 資料庫專案,並與包含延伸預存程序和程式碼的資料庫建立資料連接,以呼叫延伸預存程序。
建立呼叫延伸預存程序的 SQL 指令碼檔。
-或-
使用 SQL Server Management Studio (隨附於 SQL Server) 或 ODBC Test (隨附於 ODBC SDK) 之類的應用程式。
如果 SQL Server 目前正以服務模式執行,請開啟 [服務] 控制台、選取 [SQL Server],然後按一下 [停止],將其停止。
將 DLL 的偵錯版複製到 Sqlservr.exe 所在目錄,或是搜尋路徑中的任何目錄。
-或-
設定建置後事件,依照下列方式複製 C++ 專案中的 DLL:
開啟 [<Project> 屬性頁] 對話方塊。
在 [<Project> 屬性頁] 對話方塊中,開啟 [組態屬性] 資料夾。
開啟 [組態屬性] 下的 [建置事件] 資料夾。
選取 [建置後事件]。
在方格控制項中的 [命令列] 旁輸入複製命令,如下列範例所示:
Copy c:\MyProjects\MyXProc\debug\MyXProc.dll C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn
註冊延伸預存程序。
指定 SQL Server 為呼叫可執行檔,以及延伸預存程序 DLL 的工作目錄。修改 [<Project> 專案屬性] 對話方塊中的設定 (您可以在 [組態屬性] 的 [偵錯] 類別中存取該對話方塊),如下所示:
如果 SQL Server 安裝在預設位置,請在 [命令] 方塊中輸入 C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn\SQLSERVR.EXE。
將 [工作目錄] 項目設為 C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn。
將 [命令引數] 項目設為 -c。-c 選項對 SQL Server 指定從命令列啟動,而不要以服務模式啟動,這樣可以加快 SQL Server 啟動速度。SQL Server 不會啟動為服務,而是受 Visual Studio 偵錯環境控制的主控台應用程式。這樣可以正確地攔截及處理中斷點。
在延伸預存程序的原始程式碼中設定中斷點。
使用執行命令啟動偵錯工作階段。如需詳細資訊,請參閱執行控制。
SQL Server 啟動時會出現一個主控台視窗。文字捲動停止時,會顯示最後一個訊息:
Launched startup procedure 'sp_sqlregister'
SQL Server 隨即啟動並開始處理要求。
執行延伸預存程序。
偵錯工具達到包含中斷點的行時就會停止。
如需如何撰寫延伸預存程式的詳細資訊,請參閱 Microsoft 知識庫的 SQL Server 區段,或是 MSDN Library 中 SQL Server 文件的「延伸預存程序程式設計」(Programming Extended Stored Procedures) 區段。