sql-server - 如何在OPENQUERY中使用update和join

标签 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)

如果 ConfirmTable 中存在 ItemIDBarcode,我想将 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/

相关文章:

SQL:Last_Value() 返回错误结果(但 First_Value() 工作正常)

MySQL 加入 LIKE 语句

mysql - 如何将此 REPLACE INTO 语句转换为 MySQL 中的等效 UPDATE 语句?

sql - 从 PostgreSQL 中的子查询更新或插入(多行和多列)

sql-server - MS SQL - 使用几何数据类型查找距离是否明显更快?

sql-server - MS SQL Server 行 GUID 列

mysql - 如何删除 MySQL 中为 NULL 的 LEFT JOIN 行?

php - 一对多的mySQL JOIN

mysql - 将值从 table_a 复制/更新到 table_b 的另一行,其中 table_a.id = table_b.id AND table_a.name = table_b.name

c# - 将连接字符串添加到代码后,为什么会出现错误?