Импорт данных с другого SQL Server на другой при срабатывании триггера - PullRequest
0 голосов
/ 03 марта 2012

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

Также я хочу импортировать только новые данные, которые не были импортированы с помощью более раннего триггера.

Как бы я поступил об этом?

Ответы [ 2 ]

0 голосов
/ 03 марта 2012

Вы можете создать связанный сервер между двумя серверами SQL для отправки данных с одного на другой.

Чтобы создать связанный сервер, вам нужно использовать системную хранимую процедуру sp_addlinkedserver, вы также можете сделать это через SQL Server Management Studio.

Вот пример, который вы можете попробовать:

EXECUTE sp_addlinkedserver @server=N'serverip/hostname', @provider=N'SQLNCLI'

Вы можете посмотреть, был ли ваш связанный сервер создан с помощью запроса sys.servers

Вы можете запросить базу данных связанного сервера со следующим синтаксисом:

SELECT x
FROM [linkedservername].[database].[schema].[table]

Дополнительная информация: http://msdn.microsoft.com/en-us/library/ff772782.aspx

Для триггера, обновляемого только те данные, которые не были обработаны ранее. Есть много способов сделать это. Если ваша исходная таблица имеет столбец типа «дата обновления», вы можете сделать это на основе этого. В качестве альтернативы, если в вашей таблице есть столбец идентификаторов, и вы хотите копировать данные постепенно, вы можете сохранить в таблице «последний идентификатор», который копируется каждый раз, а затем при следующем запуске триггера вы можете сказать, что он запускается с этого id + 1, поэтому строки передаются только один раз.

0 голосов
/ 03 марта 2012

Создайте Linked Server на целевом сервере, затем используйте оператор MERGE для выполнения действий в зависимости от наличия записи в таблице назначения.
Я бы воздержался от создания триггеров, ссылающихся на удаленные серверы, хотя это может повлиять на производительность и надежность. Попробуйте использовать Service Broker, если хотите добиться небольшой задержки и при этом сделать обновление надежным.

...