我正在尝试将重复值插入到引发主键冲突错误的主键列中。我想在 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 是否是一个好习惯