我想使用SQL CLR程序集,但會導致一些異常。但是,SQL Server Management Studio只會說:如何獲取堆棧跟蹤SQL CLR程序集中發生的異常
Msg 10329, Level 16, State 49, Line 7
.Net Framework execution was aborted.
The statement has been terminated.
有什麼方法可以獲取堆棧跟蹤嗎?
我想使用SQL CLR程序集,但會導致一些異常。但是,SQL Server Management Studio只會說:如何獲取堆棧跟蹤SQL CLR程序集中發生的異常
Msg 10329, Level 16, State 49, Line 7
.Net Framework execution was aborted.
The statement has been terminated.
有什麼方法可以獲取堆棧跟蹤嗎?
直接從SSMS調用CLR應該會返回異常和堆棧跟蹤,但是如果從存儲過程中調用它,則不會返回錯誤消息。在這種情況下,您應該使用TRY CATCH
來捕捉異常。
BEGIN TRY
EXEC myproc
END TRY
BEGIN CATCH
-- insert the error message into a log table here
SELECT ERROR_MESSAGE();
END CATCH
這只是顯示「.Net Framework執行被中止。」 – logicnp
您將無法在T-SQL中檢索CLR堆棧。您在您的處置2種途徑:
修改CLR代碼,在CLR代碼添加try ... catch ...
塊和跟蹤堆棧輸出從catch塊,使用SqlPipe.Send
。這將打印堆棧在你的T-SQL環境的信息的消息,你可以用SqlConnection.InfoMessage
捕捉它在客戶端安裝調試到SQL Server,並捕獲第一次機會 CLR異常(即當例外是上調)。這將允許您解決問題並修復問題,但顯然不是生產解決方案。 SQL Server將凍結停止在調試器下,因此請確保您在受控環境中執行此操作。
@MitchWheat - 我不允許發佈它。但我不明白這是如何相關的。我只是問如何獲得與SQL CLR程序集中發生的任何異常相關的堆棧跟蹤。 – logicnp
這是相關的。因爲這裏的銳利眼睛很可能會發現編碼錯誤,而沒有堆棧跟蹤...... –
SQL服務器錯誤日誌應該包含更詳細的錯誤。 –