如何获取SQL CLR程序集中发生的异常的堆栈跟踪

时间:2012-08-28 05:19:26

标签: c# .net sql-server sqlclr clrstoredprocedure

我正在尝试使用SQL CLR程序集,但它会导致一些异常。但是,SQL Server Management Studio只说:

Msg 10329, Level 16, State 49, Line 7
.Net Framework execution was aborted. 
The statement has been terminated.

有没有办法获得堆栈跟踪?

2 个答案:

答案 0 :(得分:4)

您将无法在T-SQL中检索CLR堆栈。您可以使用两种途径:

  1. 修改CLR代码,在CLR代码中添加try ... catch ...,并使用SqlPipe.Send将堆栈跟踪到catch块的输出。这将在T-SQL环境中将堆栈打印为信息消息,您可以使用SqlConnection.InfoMessage

  2. 在客户端中捕获它。
  3. 将调试器附加到SQL Server并捕获第一次机会 CLR异常(即,引发异常时)。这将允许您解决问题并修复它,但显然不是生产的解决方案。 SQL Server将在调试器下停止时冻结,因此请确保在受控环境中执行此操作。

答案 1 :(得分:-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