我在 SQL Server 2008 R2 表中有几行
ConfirmTable (ItemID, Barcode)
DB2 头文件中的更多行
O1 (ItemId, barcode, ProductionUnit, OwnerName, Delivered, Qty)
和详细文件
O2 (ItemId, barcode, Address, ItemName, Delivered, TotalLines)
如果 ConfirmTable
中存在 ItemID
和 Barcode
,我想将 O1 和 O2 文件中的 DELIVERED 状态更新为“YES”。我正在尝试使用以下查询,但似乎显示以下错误。
OLE DB provider "DB2OLEDB" for linked server "LINK_DB" returned message "Insufficient key column information for updating or refreshing."
代码:
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
最佳答案
这是一个旧帖子,但我现在必须处理它。
不要在 OPENQUERY 中使用连接。
相反,例如,做这样的事情:
UPDATE OQ
SET OQ.Delivered='YES'
FROM OPENQUERY(LINK_DB, 'SELECT * FROM XXXXR.HLIB.O1') OQ
JOIN OPENQUERY(LINK_DB, 'SELECT * FROM XXXXR.HLIB.O2') QQ2 ON QQ.ItemID = QQ2.ItemID
INNER JOIN ConfirmTable CT ON CT.Barcode = OQ.Barcode
WHERE QQ2.Qty > 0
关于sql-server - 如何在OPENQUERY中使用update和join,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32188654/