我在
中的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文件中的已提交状态更新为“是”。我正在尝试使用以下查询,但它似乎显示以下错误。
链接服务器“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
答案 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