3

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

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

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

4

2 回答 2

4

您将无法在 T-SQL 中检索 CLR 堆栈。您有两种途径可供选择:

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

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

于 2012-08-28T06:46:03.963 回答
-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
于 2012-08-28T05:47:24.677 回答