Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вопрос про IF EXIST UPDATE/INSERT  [new]
gigar
Member

Откуда:
Сообщений: 16
Добрый день. Помогите, пожалуйста, с запрос.

Есть две таблицы storage и incoming.
Надо если есть совпадения по столбцу nomenclature_id, то сделать Update,
если нет - то INSERT.




if exists (select storage.nomenclature_id,incoming.nomenclature_id from storage,incoming where storage.nomenclature_id=incoming.nomenclature_id and incoming.incoming_num='1' )
UPDATE storage set storage.storage_qty=storage.storage_qty+incoming.incoming_qty from incoming where storage.nomenclature_id=incoming.nomenclature_id and incoming.incoming_num='1'
ELSE
INSERT INTO storage(storage.nomenclature_id,storage.storage_qty) (select incoming.nomenclature_id,incoming.incoming_qty from incoming WHERE incoming.incoming_num='1' )
22 янв 18, 12:29    [21126135]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про IF EXIST UPDATE/INSERT  [new]
Добрый Э - Эх
Guest
gigar,

почитай про DML оператор MERGE...
22 янв 18, 12:31    [21126141]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про IF EXIST UPDATE/INSERT  [new]
iap
Member

Откуда: Москва
Сообщений: 46953
До SQL2008, когда MERGE не было, делали UPDATE,
а затем INSERT, прибавляя в WHERE условие AND NOT EXISTS(SELECT * FROM ... WHERE ...)
UPDATE storage
SET storage.storage_qty=storage.storage_qty+incoming.incoming_qty
FROM incoming
WHERE storage.nomenclature_id=incoming.nomenclature_id and incoming.incoming_num='1';

INSERT storage(nomenclature_id,storage_qty)
SELECT nomenclature_id,incoming_qty
FROM incoming
WHERE incoming.incoming_num='1' 
AND NOT EXISTS(SELECT * FROM storage S WHERE S.nomenclature_id=incoming.nomenclature_id);

Если версия SQL2008 или более поздняя, то красивее? конечно, то же самое через MERGE.
22 янв 18, 13:10    [21126395]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про IF EXIST UPDATE/INSERT  [new]
gigar
Member

Откуда:
Сообщений: 16
Огромное спасибо за помощь.
22 янв 18, 13:19    [21126456]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить