2012-08-28 28 views
2

我想使用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. 

有什麼方法可以獲取堆棧跟蹤嗎?

+0

@MitchWheat - 我不允許發佈它。但我不明白這是如何相關的。我只是問如何獲得與SQL CLR程序集中發生的任何異常相關的堆棧跟蹤。 – logicnp

+0

這是相關的。因爲這裏的銳利眼睛很可能會發現編碼錯誤,而沒有堆棧跟蹤...... –

+1

SQL服務器錯誤日誌應該包含更詳細的錯誤。 –

回答

-1

直接從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 
+0

這只是顯示「.Net Framework執行被中止。」 – logicnp

3

您將無法在T-SQL中檢索CLR堆棧。您在您的處置2種途徑:

  1. 修改CLR代碼,在CLR代碼添加try ... catch ...和跟蹤堆棧輸出從catch塊,使用SqlPipe.Send。這將打印堆棧在你的T-SQL環境的信息的消息,你可以用SqlConnection.InfoMessage

  2. 捕捉它在客戶端安裝調試到SQL Server,並捕獲第一次機會 CLR異常(即當例外是上調)。這將允許您解決問題並修復問題,但顯然不是生產解決方案。 SQL Server將凍結停止在調試器下,因此請確保您在受控環境中執行此操作。