1/Следующий фрагмент кода показывает мне ожидаемую ошибку: Оператор INSERT противоречил ограничению FOREIGN KEY FK _...
SET XACT_ABORT ON;
BEGIN TRANSACTION
INSERT INTO linkedsrv1.db1.[dbo].tbl1 ([Col1], [Col2])
VALUES (1200, 0)
COMMIT TRANSACTION
2/Но когда я помещаю это в BEGIN TRY/CATCH, сообщение об ошибке является неопределенным: Msg 1206, уровень 18, состояние 118, строка 18 Координатор распределенных транзакций Microsoft (MS DTC) отменил распределенную транзакцию.
SET XACT_ABORT ON;
BEGIN TRY
BEGIN TRANSACTION
-- Error is on this line
INSERT INTO linkedsrv1.db1.[dbo].tbl1 ([IdWebsite], [IdProductType])
VALUES (1200, 0)
COMMIT TRANSACTION
END TRY
BEGIN CATCH
PRINT 'Error' -- Code not reached
SELECT ERROR_NUMBER(), ERROR_MESSAGE(), ERROR_SEVERITY(), ERROR_STATE()
IF XACT_STATE() != 0
ROLLBACK TRANSACTION
END CATCH
Любая идея, почему это происходит?
Редактировать позже:
-
Он работает, если я удалю ненужную явную транзакцию. Пока неясно, почему я получаю эту ошибку, когда я помещаю BEGIN/COMMIT TRAN.
-
Я получаю ту же ошибку, если у меня есть несколько вложений в нескольких таблицах, расположенных на связанном сервере.
Любые комментарии/замечания приветствуются.