Вопрос

У меня есть два сервера, первый с SQL Server 2005, а второй с SQL Server 2000.Я хочу вставить данные с 2005 по 2000 год, и я хочу сделать это несинхронизированным (без распределенных транзакций, потому что используется "сохранить транзакцию").

Как только информация вставлена в таблицы сервера 2000, для обработки этой информации запускаются некоторые триггеры "вместо".

В этом случае я решил воспользоваться Service Broker.Итак, у меня есть Хранимая процедура для вставки информации с одного сервера на другой, и она работает отлично.

Но когда я вызываю эту процедуру из процедуры обработки сообщений целевой очереди, она завершается с ошибкой, и я не знаю почему!!

Кроме того, я знаю, что это работает, потому что когда я использую ту же структуру (очереди и хранимые процедуры) для копирования из одной базы данных в другую на том же сервере SQL 2005.

Таким образом, сбой происходит только между машинами, кто-нибудь знает, почему или как получить больше информации о причине сбоя?Или как вставить данные несинхронно (я не могу использовать SQL Agent, потому что я хочу вставлять информацию чаще, чем за 1 минуту).

Это было полезно?

Решение

Обычная проблема заключается в том, что процедура SSB использует WAITFOR, а WAITFOR несовместим с распределенными транзакциями.Единственное решение - избавиться от функции ОЖИДАНИЯ (RECEIVE) и использовать вместо нее обычный RECEIVE.

Другие советы

Рассмотрите возможность использования связанного сервера вместо service broker.С помощью связанного сервера вы можете:

insert into LinkedServer.The2000Db.dbo.The2000Table
(col1, col2, col3)
select col1, col2, col3
from The2005Table
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top