Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Openquery и триггер  [new]
dimon71
Member

Откуда:
Сообщений: 172
Есть прилинкованый к MSSQL сервер MySQL.

Конструкция

DECLARE
@SQL VARCHAR (1000);
SET @SQL = 'UPDATE OPENQUERY (tech, ''select products_price, products_id FROM products WHERE products_id = ' + CAST (@GID AS VARCHAR (10)) + ''') SET products_price = ' + CAST (@PRICE AS VARCHAR (10)) + ' WHERE products_id = ' + CAST (@GID AS VARCHAR (10));
EXEC (@SQL);

работает.

Не работает если ее вызывать в триггере.

Я почитал по инету, у всех так (не совсем понял почему), и еще понял, что заставить выполнятся это все в тригере не получится.

Но задачу как-то решить нужно.
Задача - обновлять данные на прилинкованном сервере в реальном, или на худой конец небольшом промежутке времени. Это контент интернет магазина.

Можно сделать JOB и постепенно сливать данные из MSSQL в MySQL.
Но хотелось бы для уменьшения трафика передавать только обновленные данные, а не гнать полностью всю базу.
Данные на MSSQL сервере постоянно обновляются (работают контентщики, затягиваются прайсы...)

Как решить задачу переброски только обновленных данных?
Запускать JOB работающий по логам изменений данных таблиц?
26 май 11, 18:37    [10715585]     Ответить | Цитировать Сообщить модератору
 Re: Openquery и триггер  [new]
iljy
Member

Откуда:
Сообщений: 8711
dimon71,

использовать в триггере обращение к внешнему серверу - крайне плохая идея. Используйте Service Broker, либо механизмы CDC/ChangeTracking
26 май 11, 18:48    [10715648]     Ответить | Цитировать Сообщить модератору
 Re: Openquery и триггер  [new]
Fire83
Member

Откуда: Гомель-Минск
Сообщений: 474
dimon71,
Какая версия MS SQL у вас?
26 май 11, 18:49    [10715656]     Ответить | Цитировать Сообщить модератору
 Re: Openquery и триггер  [new]
dimon71
Member

Откуда:
Сообщений: 172
Fire83,

mssql 2000
26 май 11, 19:12    [10715750]     Ответить | Цитировать Сообщить модератору
 Re: Openquery и триггер  [new]
iljy
Member

Откуда:
Сообщений: 8711
dimon71
Fire83,

mssql 2000

Тогда можно настроить репликацию, в 2000 помнится была репликация на ODBC-подписчика.
26 май 11, 19:21    [10715786]     Ответить | Цитировать Сообщить модератору
 Re: Openquery и триггер  [new]
Fire83
Member

Откуда: Гомель-Минск
Сообщений: 474
dimon71
Не работает если ее вызывать в триггере.

есть ошибка какая-то? приведите её текст
26 май 11, 19:26    [10715799]     Ответить | Цитировать Сообщить модератору
 Re: Openquery и триггер  [new]
dimon71
Member

Откуда:
Сообщений: 172
Fire83,

Уже снес все из тригера....
Попробую завтра на работе - напишу.
Я ошибку искал в гугле, нашел у многих. Проблема та же. Openquery не работает в тригерах.
На форумах ругались не по русски, смысл сводился к тому, (я не очень понял) что Openquery создает транзакцию, и она не может быть вложена в транзакцию созданную тригером. Простите за чепуху.
26 май 11, 19:43    [10715842]     Ответить | Цитировать Сообщить модератору
 Re: Openquery и триггер  [new]
Glory
Member

Откуда:
Сообщений: 104751
dimon71
Я ошибку искал в гугле, нашел у многих. Проблема та же. Openquery не работает в тригерах.
На форумах ругались не по русски, смысл сводился к тому, (я не очень понял) что Openquery создает транзакцию, и она не может быть вложена в транзакцию созданную тригером. Простите за чепуху.

Не путайте божий дар с яичницей. А внимательно читайте сообщение об ошибке
Если оно говорит о невозможности начать распределенную транзакцию, то проблема не Openquery, а в том, что не настроили эти самые распределенные транзакции
И транзакцию кстати создает команда, на которую сработал триггер, а не Openquery
27 май 11, 10:02    [10717378]     Ответить | Цитировать Сообщить модератору
 Re: Openquery и триггер  [new]
dimon71
Member

Откуда:
Сообщений: 172
Glory,

Да, Вы совершенно правы.
Про распределенную транзакцию я не разобрал, когда гуглил, а про настройку транзакций было сказано.
Но также было сказано, что это не наилучший вариант, и такое действо не рекомендовалось.
Как впрочем и то, что в триггер встраивать опенквэри крайне не желательно. (как и указал уважаемый iljy)

Действительно, разорвалась связь с удаленным Mysql, и все. Получится, что нельзя будет изменить и исходную таблицу.

Сейчас попробую репликацию настроить.
27 май 11, 11:03    [10717874]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить