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 スタックを取得することはできません。次の 2 つの方法があります。

  1. try ... catch ...を使用して、CLR コードを変更し、CLR コードにブロック追加 し、catch ブロックからの出力までスタックをトレースしますSqlPipe.Send。これにより、T-SQL 環境で情報メッセージとしてスタックが出力されます。クライアントでキャプチャできます。SqlConnection.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 に答える