2012-08-28 38 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将冻结停止在调试器下,因此请确保您在受控环境中执行此操作。