2015-08-24 3 views
0

У меня есть несколько строк в SQL Server 2008 R2 таблицу вКак использовать обновления и присоединиться к OPENQUERY

ConfirmTable (ItemID, Barcode) 

и более строк в файле заголовка DB2

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

и детализация файл

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

Я хочу обновить статус ДОСТАВКИ в файлах O1 и O2 до «YES», если ItemID и Barcode есть в ConfirmTable. Я пытаюсь использовать следующий запрос, но кажется, что появляется следующая ошибка.

Поставщик OLE DB «DB2OLEDB» для связанного сервера «LINK_DB» возвратил сообщение «Недостаточно информации о столбцах для обновления или обновления».

Код:

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

Так вы хотите, чтобы обновить таблицу, которая удалена с помощью связанного сервера? – lad2025

+0

Да! FYI: выбор запроса отлично работает с указанным выше запросом. – Denn

+0

Согласитесь, но то, чего вы хотите достичь, вам нужно скорее «EXECUTE (sql) AT linked_server'. Во-вторых, OQ является результатом JOIN не отдельной таблицы, так как вы хотите обновить ее, если она была локально? – lad2025

ответ

2

Это старый пост, но теперь я занимаюсь с ней.

Не используйте присоединиться 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 
+0

Спасибо за попытку, я исправил его долго назад. – Denn

Смежные вопросы