是否可以在链接服务器的数据库表上使用SQL MERGE功能?最终目标是将远程表与本地SQL服务器表同步。我在网上做了一些研究,但没有找到任何相关信息。如果可能,您将如何设置源和目标语句?
是否可以在链接服务器的数据库表上使用SQL MERGE功能?最终目标是将远程表与本地SQL服务器表同步。我在网上做了一些研究,但没有找到任何相关信息。如果可能,您将如何设置源和目标语句?
重申@Mikael Eriksson的评论,是的,你可以这样做。MERGE语句的目标不能是远程的,但是MERGE语句的源头可以是远程的。所以,如果你可以在FL服务器上运行MERGE语句,那么这是完全可能的。例如,你可以在FL的远程服务器上运行类似这样的语句:
MERGE INTO "local FL table" USING "CT server"."database"."schema"."same table" ON ...
这不是对该问题的确切回答,而是更新链接服务器中远程表的替代方法。
UPDATE [RemoteItem]
SET [RemoteItem].[AccountID] = [I].[AccountID]
FROM OPENQUERY
(
[LINKEDSERVER],
'select AccountID from [RemoteDb].dbo.[Item]'
) [RemoteItem]
INNER JOIN [LocalDB].[dbo].[Item] AS [I]
ON p.ProductID = oq.ProductID
请参考此链接
未经测试。
您可以在服务器上始终使用EXEC('SQL CODE HERE')AT YOUR_LINKED_SERVER,可能作为存储过程。
这将在链接的服务器上执行所需的查询,以便将本地表(target_table)与服务器表(source)合并。
这是我在服务器中使用的存储过程代码,客户端从服务器执行存储过程 -> 服务器执行查询,以使用相同的信息(员工)更新不同的链接服务器(客户端)。
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
CT
合并到FL
,那么你不能使用merge
。 - Mikael Eriksson