Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 with + if exists  [new]
zorix
Guest
Имеется проблема - if exists не работает вместе с with. Делаю примерно так (первый пример работает, второй - нет):
-- (WORK) decrease qty in room 1
with I as ( select ARTICLE, QTY from ITEMS where DOCTYPE='C' and STORE='Z' and NUMBER=24 )
  update STOREQTY set SQ.RESERVED=SQ.RESERVED-I.QTY from STOREQTY SQ join I on SQ.ARTICLE=I.ARTICLE and SQ.ROOM=1

-- (FAILS) increase (update / insert a copy of data from room 1) qty in room 2
with I as ( select ARTICLE, QTY from ITEMS where DOCTYPE='C' and STORE='Z' and NUMBER=24 )
  if exists (select * from STOREQTY join I on SQ.ARTICLE=I.ARTICLE and SQ.ROOM=2)
  begin
    update STOREQTY set SQ.RESERVED=SQ.RESERVED+I.QTY from STOREQTY SQ join I on SQ.ARTICLE=I.ARTICLE and SQ.ROOM=2
  end
  else
  begin
    insert into STOREQTY (ARTICLE, ROOM, RESERVED)
      ( select ARTICLE, 2, I.QTY from STOREQTY join I on SQ.ARTICLE=I.ARTICLE and SQ.ROOM=1 )
  end

Что здесь хочется получить: при обновлении данных вторым запросом если комната уже есть, данные просто обновить, если комнаты нет - скопировать данные из комнаты 1 в комнату 2 с новым значением количества и номером комнаты. К сожалению SQL server ругается на применение if exists - мол, неправильный синтаксис.
Подскажите плиз, как сделать правильно :) Заранее благодарю!
31 окт 16, 15:23    [19842382]     Ответить | Цитировать Сообщить модератору
 Re: with + if exists  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
zorix,

мир скатился в cte. Чем вас MERGE не устраивает?
31 окт 16, 15:25    [19842395]     Ответить | Цитировать Сообщить модератору
 Re: with + if exists  [new]
zorix
Guest
Да не приходилось никогда сталкиваться merge. Вот с with работать приходится иногда.
За наводку спасиьр, надо попытать счастья с этим merge, вдруг чего и получится )
31 окт 16, 15:34    [19842445]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить