如何使用更新&加入OPENQUERY

时间:2015-08-24 17:56:08

标签: sql-server join sql-update db2 linked-server

我在

中的SQL Server 2008 R2表中有几行
ConfirmTable (ItemID, Barcode)

以及DB2头文件中的更多行

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

和详细文件

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

如果ItemID中存在BarcodeConfirmTable,我想将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

1 个答案:

答案 0 :(得分:3)

它的老帖子,但现在我处理它。

不要在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