db2 如何在OPENQUERY中使用更新和加入

shyt4zoc  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(180)

我在SQL Server 2008 R2表中有几行

ConfirmTable (ItemID, Barcode)

和DB2头文件中的更多行

O1 (ItemId, barcode, ProductionUnit, OwnerName, Delivered, Qty)

和详细信息文件

O2 (ItemId, barcode, Address, ItemName, Delivered, TotalLines)

如果ItemIDBarcode存在于ConfirmTable中,我想将O1和O2文件中的“已交付”状态更新为“是”。我正在尝试使用以下查询,但似乎显示以下错误。
链接服务器“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

cxfofazt

cxfofazt1#

这是一个老职位,但我不得不处理它现在。
不要在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

相关问题