Я написал триггер, который обновляет локальную таблицу и аналогичную таблицу на связанном сервере.
CREATE TRIGGER myTtableUpdate ON myTable
AFTER UPDATE
AS
IF (COLUMNS_UPDATED() > 0)
BEGIN
DECLARE @retval int;
BEGIN TRY
EXEC @retval = sys.sp_testlinkedserver N'my_linked_server';
END TRY
BEGIN CATCH
SET @retval = sign(@@error);
END CATCH;
IF (@retval = 0)
BEGIN
UPDATE remoteTable SET remoteTable.datafield = i.datafield
FROM my_linked_server.remote_database.dbo.myTable remoteTable
INNER JOIN inserted i ON (remoteTable.id = i.id)
END
END -- end of trigger
К сожалению, когда соединение не работает, я получаю сообщение об ошибке
'Сообщение 3616, уровень 16, состояние 1, строка 2'
'Транзакция обречена на триггер. Пакетная обработка была прервана'
, и выполнен откат локального обновления.
Есть ли способ устранить эту ошибку и сохранить локальные обновления?
Обратите внимание, что я использую SQL Server 2005 Express Edition на обоих компьютерах под управлением Windows XP Pro.
edit1: сервер SQL Express Edition
edit2: оба ПК работают под управлением Windows XP Pro, поэтому это не серверы