SQL Try-Catch ブロックはスローされた CLR エラーを処理できますか?
-
02-07-2019 - |
質問
SQL 2005 と try-catch 機能を使用して、DB 内でのすべてのエラー処理を処理しています。現在、DB 内でいくつかの WCF 呼び出しを行うための .NET CLR 関数のデプロイに取り組んでいます。この WCF プロシージャは CLR で記述され、SQL にデプロイされます。CLR コードに try-catch ブロックを置くと、エラーがうまくキャッチされます。ただし、SQL の try-catch ブロックまでエラーをスローすることはできないようです。SQL は、私がスローしたものを無視し、見つかったエラーをキャッチするようです。この 2 つに関係はないのでしょうか (つまり、次から次へ投げることはできないの?)
CLR 内から SQL の呼び出しプロシージャにスローできる場合、特別な書式設定は必要ですか?スローされたエラーをキャッチしてから別のエラーをスローするという特定のケースを試してみましたが、SQL はスローされたエラーを無視したかのように、スローされたエラーを無視して元のエラーをキャッチしました。
解決
これについて高いレベルで説明したブログ投稿は次のとおりです。SQLCLR での例外処理
SQL サーバーが CLR に実装されたユーザー関数/プロシージャ/トリガー (つまり、マネージド コード) を実行するとき、ユーザー コードの周囲にマネージド例外ハンドラーをインストールします。したがって、ユーザー コードが例外をリークした場合、サーバーはそれをキャッチし、ユーザー例外をラップする TSQL 例外をスローします。
これは、それがうまくいくことを意味しているようです。
所属していません StackOverflow