Возможно ли использовать функцию SQL MERGE в таблице базы данных связанного сервера? Конечной целью является синхронизация удаленной таблицы с нашей локальной таблицей SQL-сервера. Я провел некоторое исследование в Интернете и не нашел никакой связанной информации. Если возможно, как бы вы настроили исходные и целевые утверждения?SQL MERGE для удаленной (связанной) таблицы сервера
ответ
Видимо мое исследование не было достаточно хорошо, это указано прямо на сайте MSDN: «target_table не может быть удаленной таблицей» ... так, что ответы на этот вопрос ...
Если я не буду использовать его для удаленного стола, его половина ничего не стоит! Это похоже на путешествие в 1000 миль и необходимость покинуть машину и начать ходить после 500-й мили. –
Повторит комментарий по @Mikael Эрикссон, да, ты можешь. Цель MERGE не может быть удаленной, но источник MERGE может быть удален. Итак, если вы можете запустить оператор MERGE со своего сервера в FL, то это вполне возможно. Например, вы можете запустить что-то вроде этого на вашем сервере удалить в FL:
MERGE INTO "local FL table" USING "CT server"."database"."schema"."same table" ON ...
Спасибо, что упомянули об этом, я думал, что попал в тупик, когда получил ошибку о слиянии, не имея возможности запускать удаленные цели , но затем я получил подсказку из вашего ответа, что я могу обменять серверы и выполнить запрос на самом главном сервере, и он работал как шарм. – Niklas
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
, но это требует, чтобы целевой сервер должен иметь исходный сервер в качестве связанного сервера, что не всегда возможно или желательно. В некотором смысле, это просто переворачивает проблему. –
@ EdgarHolguin Чтобы напомнить вам, если вызовы RPC не включены для удаленных серверов, вышеуказанное не будет работать – ha9u63ar
ли вы имеете в виду, что таблица находится на [Linked Server] (HTTP: // msdn.microsoft.com/en-us/library/ms188279.aspx)? Где находится таблица * target *? Из [Объединение] (http://technet.microsoft.com/en-us/library/bb510625.aspx): * «target_table не может быть удаленной таблицей». * –
Да, связано. Он находится в FL, я в CT. – devHead
Тогда вы не можете использовать 'merge', если хотите слить из' CT' в 'FL'. –