Я пытаюсь проверить вставки на связанный сервер MySQL с помощью триггеров, но у меня возникло несколько проблем.
Система-
Windows 2003 Server работает
- SQL Server 2008 R2 Developer Edition
Сервер MySQL 5.5.15.0
- MySQL ODBC 5.1 драйвер
Я следовал инструкциям в этом посте - http://www.sqlservercentral.com/Forums/Topic340912-146-1.aspx, чтобы связать сервер MySQL с сервером SQL
Я могу ВЫБРАТЬ и ВСТАВИТЬ строки на связанном сервере, используя окно запросов в SSMS.
Проблема возникает, когда я пытаюсь выполнить INSERT для связанного сервера в триггере.
Trigger
USE [Test]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER trigger [dbo].[update_trig] on [dbo.test]
for insert
as
SET XACT_ABORT ON
INSERT INTO OPENQUERY(MYSQL, 'select data from roh.test') values ('testing trigger')
Когда строка вставляется в сервер SQL, возникает следующая ошибка
Сообщение 7391, уровень 16, состояние 2, процедура update_trig, строка 7
Не удалось выполнить операцию, поскольку поставщику OLE DB «MSDASQL» для связанного сервера «MYSQL» не удалось начать распределенную транзакцию.
После небольшого поиска в Google кто-то предложил добавить оператор триггера в триггер после SET XACT_ABORT ON, поэтому последняя часть триггера выглядит как
SET XACT_ABORT ON
COMMIT
INSERT INTO OPENQUERY(MYSQL, 'select data from roh.test') values ('testing trigger')
Это делает вставку в связанный сервер MySQL, но выдает ошибку -
Сообщение 3609, Уровень 16, Состояние 1, Строка 1
Транзакция завершилась в триггере. Пакет был прерван.
Кто-то также предложил выполнить вставку в хранимую процедуру и вызвать ее из триггера, но это приводит к тем же ошибкам.
Я что-то упустил или это невозможно? Любые предложения будут оценены.