主キー違反エラーが発生する主キー列に重複する値を挿入しようとしています。このエラーを catch ブロック内に記録したいと思います。
コードブロック :-
SET XACT_ABORT OFF
BEGIN TRY
BEGIN TRAN
INSERT INTO #Calender values (9,'Oct')
INSERT INTO #Calender values (2,'Unknown')
COMMIT TRAN
END TRY
BEGIN CATCH
Insert into #LogError values (1,'Error while inserting a duplicate value')
if @@TRANCOUNT >0
rollback tran
raiserror('Error while inserting a duplicate value ',16,20)
END CATCH
上記のコードを実行すると、catch ブロックに表示されるカスタム エラー メッセージが出力されますが、#LogError テーブルには値が挿入されません。
Error while inserting a duplicate value
しかし、SET XACT_ABORT ON を使用すると、別のエラー メッセージが表示されますが、それでもエラー メッセージがテーブルに挿入されません。
The current transaction cannot be committed and cannot support operations
that write to the log file. Roll back the transaction.
私の質問は
1.テーブルにエラーを記録する方法
2. xact_ABORT をオンに設定すると、異なるエラー メッセージが表示されるのはなぜですか。すべてのトランザクションの前に XACT_ABORT をオンに設定することをお勧めします