我正在尝试使用SQL CLR程序集,但它会导致一些异常。但是,SQL Server Management Studio只说:
Msg 10329, Level 16, State 49, Line 7
.Net Framework execution was aborted.
The statement has been terminated.
有没有办法获得堆栈跟踪?
答案 0 :(得分:4)
您将无法在T-SQL中检索CLR堆栈。您可以使用两种途径:
修改CLR代码,在CLR代码中添加try ... catch ...
块,并使用SqlPipe.Send
将堆栈跟踪到catch块的输出。这将在T-SQL环境中将堆栈打印为信息消息,您可以使用SqlConnection.InfoMessage
将调试器附加到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