是否可以在链接服务器的数据库表上使用 SQL MERGE 功能?最终目标是将远程表与我们的本地 SQL 服务器表同步。我在网上做了一些研究,找不到任何相关信息。如果可能,您将如何设置源语句和目标语句?
问问题
22963 次
4 回答
21
重申@Mikael Eriksson 的评论,是的,你可以。MERGE的目标不能是远程的,但 MERGE 的源可以是远程的。因此,如果您可以在 FL 中从您的服务器运行 MERGE 语句,那么这是很有可能的。例如,您可以在 FL 的删除服务器上运行类似这样的操作:
MERGE INTO "local FL table" USING "CT server"."database"."schema"."same table" ON ...
于 2013-11-06T17:39:16.520 回答
6
显然我的研究还不够好,它在 MSDN 上是正确的:“target_table 不能是远程表”......所以回答了这个问题......
于 2013-03-11T16:02:09.597 回答
0
这不是这个问题的确切答案。但是在链接服务器中更新远程表的替代方法。
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
参考这个链接
未测试。
于 2022-01-12T05:35:51.063 回答
-1
Yoy 始终可以在您的服务器中使用 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
于 2014-03-13T16:41:33.647 回答