SQL Server вставляет в триггере на связанный сервер MySQL не работает - PullRequest
2 голосов
/ 02 сентября 2011

Я пытаюсь проверить вставки на связанный сервер 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 Транзакция завершилась в триггере. Пакет был прерван.

Кто-то также предложил выполнить вставку в хранимую процедуру и вызвать ее из триггера, но это приводит к тем же ошибкам. Я что-то упустил или это невозможно? Любые предложения будут оценены.

...