【发布时间】:2023-03-14 15:30:01
【问题描述】:
我在一个 SQL Server 2008 R2 表中有几行
ConfirmTable (ItemID, Barcode)
以及 DB2 头文件中的更多行
O1 (ItemId, barcode, ProductionUnit, OwnerName, Delivered, Qty)
和详细文件
O2 (ItemId, barcode, Address, ItemName, Delivered, TotalLines)
如果ItemID 和Barcode 存在于ConfirmTable 中,我想将O1 和O2 文件中的DELIVERED 状态更新为“YES”。我正在尝试使用以下查询,但似乎显示以下错误。
链接服务器“LINK_DB”的 OLE DB 提供程序“DB2OLEDB”返回消息“用于更新或刷新的键列信息不足。”
代码:
UPDATE OQ
SET OQ.Delivered='YES'
FROM OPENQUERY(LINK_DB, 'SELECT *
FROM XXXXR.HLIB.O1 O1O
LEFT JOIN XXXXR.HLIB.O2 O2O ON O1O.ItemID = O2O.ItemID
WHERE O1O.Qty > 0') OQ
INNER JOIN
ConfirmTable CT ON CT.Barcode = OQ.Barcode
我也尝试了以下更新格式,但它对我不起作用。
http://www.experts-exchange.com/questions/28390846/OPENQUERY-in-sql-server-linked-server.html
【问题讨论】:
-
所以你想通过链接服务器更新远程表?
-
是的!仅供参考:选择查询与上述查询完美配合。
-
同意,但是您想要实现的目标需要
EXECUTE (sql) AT linked_server。第二件事 OQ 是 JOIN 而不是单个表的结果,那么如果它是本地的,你想如何更新它? -
对不起!只是意识到。从那里删除了 ItemID 查看项目的唯一方法是通过条形码。
-
首先应该更新哪个表 XXXXR.LIB.O1 或 XXXXR.HLIB.O1?
标签: sql-server join sql-update db2 linked-server