Как отловить «серьезную ошибку» в распределенной транзакции? - PullRequest
0 голосов
/ 06 февраля 2020

В распределенной транзакции возникает «серьезная ошибка» при попытке вставить значения нарушения уникального ключа. Как отловить «серьезную ошибку»?

SAMPLE QUERY 1

SET XACT_ABORT ON
BEGIN DISTRIBUTED TRAN
    BEGIN TRY
        INSERT INTO [LINKEDSERVER].[DB].[SCHEMA].[TABLE] VALUES(THE VALUES Violation of UNIQUE KEY)
    END TRY
COMMIT TRAN
BEGIN CATCH
    ROLLBACK TRAN
    PRINT ERROR_MESSAGE()
END CATCH

RESULT 1

*Msg 0, Level 11, State 0, Line 0
A severe error occurred on the current command. The results, if any, should be discarded.*

ОБРАЗЕЦ ЗАПРОСА 2

INSERT INTO [LINKEDSERVER].[DB].[SCHEMA].[TABLE] VALUES(THE VALUES Violation of UNIQUE KEY)

РЕЗУЛЬТАТ 2

Msg 2627, Level 14, State 1, Line 1
Violation of UNIQUE KEY constraint 'XXX'. Cannot insert duplicate key in object '[SCHEMA].[TABLE]'. The duplicate key value is (XXX).

Испытанная среда

From : Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64) on Windows 10 Pro 10.0
To : Microsoft SQL Server 2016 (RTM) - 13.0.1601.5 (X64) on Windows Server 2012 R2 Standard

From : Microsoft SQL Server 2012 - 11.0.2100.60 (X64) on Windows NT 6.2
To : Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64) on Windows 10 Pro 10.0
...