SQL CLR アセンブリを使用しようとしていますが、何らかの例外が発生します。ただし、SQL Server Management Studio は次のようにしか言いません。
Msg 10329, Level 16, State 49, Line 7
.Net Framework execution was aborted.
The statement has been terminated.
スタックトレースを取得する方法はありますか?
SQL CLR アセンブリを使用しようとしていますが、何らかの例外が発生します。ただし、SQL Server Management Studio は次のようにしか言いません。
Msg 10329, Level 16, State 49, Line 7
.Net Framework execution was aborted.
The statement has been terminated.
スタックトレースを取得する方法はありますか?
T-SQL で CLR スタックを取得することはできません。次の 2 つの方法があります。
try ... catch ...
を使用して、CLR コードを変更し、CLR コードにブロックを追加 し、catch ブロックからの出力までスタックをトレースしますSqlPipe.Send
。これにより、T-SQL 環境で情報メッセージとしてスタックが出力されます。クライアントでキャプチャできます。SqlConnection.InfoMessage
デバッガーを SQL Server にアタッチし、最初の機会のCLR 例外 (つまり、例外が発生したとき) をキャプチャします。これにより、問題をトラブルシューティングして修正することができますが、明らかに本番用のソリューションではありません。デバッガーで停止している間、SQL Server はフリーズするため、制御された環境で実行してください。
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