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