2013-03-06 2 views
6

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

+1

ли вы имеете в виду, что таблица находится на [Linked Server] (HTTP: // msdn.microsoft.com/en-us/library/ms188279.aspx)? Где находится таблица * target *? Из [Объединение] (http://technet.microsoft.com/en-us/library/bb510625.aspx): * «target_table не может быть удаленной таблицей». * –

+0

Да, связано. Он находится в FL, я в CT. – devHead

+0

Тогда вы не можете использовать 'merge', если хотите слить из' CT' в 'FL'. –

ответ

5

Видимо мое исследование не было достаточно хорошо, это указано прямо на сайте MSDN: «target_table не может быть удаленной таблицей» ... так, что ответы на этот вопрос ...

+0

Если я не буду использовать его для удаленного стола, его половина ничего не стоит! Это похоже на путешествие в 1000 миль и необходимость покинуть машину и начать ходить после 500-й мили. –

9

Повторит комментарий по @Mikael Эрикссон, да, ты можешь. Цель MERGE не может быть удаленной, но источник MERGE может быть удален. Итак, если вы можете запустить оператор MERGE со своего сервера в FL, то это вполне возможно. Например, вы можете запустить что-то вроде этого на вашем сервере удалить в FL:

MERGE INTO "local FL table" USING "CT server"."database"."schema"."same table" ON ... 
+0

Спасибо, что упомянули об этом, я думал, что попал в тупик, когда получил ошибку о слиянии, не имея возможности запускать удаленные цели , но затем я получил подсказку из вашего ответа, что я могу обменять серверы и выполнить запрос на самом главном сервере, и он работал как шарм. – Niklas

0

Yoy всегда можно использовать EXEC («SQL код здесь») AT YOUR_LINKED_SERVER на сервере, может быть, в качестве хранимой процедуры.

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

Это код, который я использую в хранимой процедуре на своем Сервере, которую вызывается от клиента. Клиент Exec хранимая процедура в server-> Сервер Exec запрос для обновления различных связанных серверов (клиентов) с той же Informacion (сотрудников)

EXEC(' 
SET IDENTITY_INSERT PVBC.DBO.empleadas ON 

MERGE INTO PVBC.DBO.empleadas A 
USING(
    SELECT id_empleada, nombre, apellidos 
    FROM SERVIDOR.PVBC_SERVIDOR.DBO.empleadas) TA 
ON (A.id_empleada =TA.id_empleada) 
WHEN MATCHED THEN 
UPDATE 
    SET A.nombre=TA.nombre, 
     A.apellidos=TA.apellidos 
WHEN NOT MATCHED THEN 

    INSERT 
     (id_empleada, nombre, apellidos) 
    VALUES 
     (id_empleada, nombre, apellidos); 

SET IDENTITY_INSERT PVBC.DBO.empleadas OFF 
')AT MEGA --This is one of my linked servers 
+0

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

+0

@ EdgarHolguin Чтобы напомнить вам, если вызовы RPC не включены для удаленных серверов, вышеуказанное не будет работать – ha9u63ar