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

C# 如何获取SQL CLR程序集中发生的异常的堆栈跟踪,c#,.net,sql-server,sqlclr,clrstoredprocedure,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. 有没有办法获取堆栈跟踪?直接从SSMS调用CLR应返回异常和堆栈跟踪,但如果从存储的进程内部调用,则不会返回错误消息。在这种情况下,您应该使用TRY

我试图使用SQL CLR程序集,但它会导致一些异常。但是,SQL Server Management Studio仅说明:

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

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

直接从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

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

  • 修改CLR代码,添加
    尝试。。。在CLR代码中捕获…
    块,并使用跟踪堆栈到捕获块的输出。这将在T-SQL环境中将堆栈打印为信息消息,您可以使用

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


  • @米奇麦-我不允许发布它。但我不认为这有什么关系。我只是问如何获取与SQL CLR程序集中发生的任何异常关联的堆栈跟踪。这是相关的。因为这里的锐利目光很可能在没有堆栈跟踪的情况下发现编码错误…SQL server错误日志应该包含更详细的错误。请使用
    try。。。在CLR代码中捕获。@MitchWheat-我相信“教人钓鱼…”:-)