SQL Try-Catch ブロックはスローされた CLR エラーを処理できますか?

StackOverflow https://stackoverflow.com/questions/122739

  •  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 例外をスローします。

これは、それがうまくいくことを意味しているようです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top