【问题标题】:How to use update & join in OPENQUERY如何在 OPENQUERY 中使用更新和加入
【发布时间】: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)

如果ItemIDBarcode 存在于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


【解决方案1】:

这是一个旧帖子,但我现在必须处理它。

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

【讨论】:

  • 感谢您的尝试,我早就修好了。
  • 感谢您的发帖,@Denn 并不是唯一一个试图让它发挥作用的人,正如此页面上的浏览量所表明的那样。
猜你喜欢
  • 1970-01-01
  • 2023-03-27
  • 2012-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-20
相关资源
最近更新 更多