Как обновить строку, если она существует и соответствует более чем одному условию, и вставить ее в противном случае на SQL Сервер - PullRequest
1 голос
/ 29 мая 2020

Я пытаюсь выполнить приведенный ниже код, который я нашел в потоке здесь

UPDATE MyGuests 
SET lastname = 'Doe' 
WHERE id = 2

IF ROW_COUNT() = 0
   INSERT INTO MyGuests (lastname, id) 
   VALUES ('Doe', 2)

Проблема в том, что мне нужно сделать то же самое, но с SQL Запрос сервера. Моя основная мысль здесь заключается в том, что если новое чтение имеет тот же BoxNo, тот же SSCC и тот же StyleBarcode, тогда значение в столбце Qty будет обновлено на +1. В противном случае будет создана новая вставка.

Я думаю сделать что-то вроде следующего кода:

UPDATE MyTable 
SET Qty = Qty + 1 
WHERE BoxNo = 1 
  AND SSCC = 15210049000887900 
  AND StyleBarcode = 5210132138457

IF ROW_COUNT() = 0
   INSERT INTO MyTable (SSCC, StyleBarcode, Qty) 
   VALUES (15210049000887900, 5210132138457, 1)

Но я не смог сделать это, потому что у меня нет что-то вроде ROW_COUNT() на SQL сервере.

Или я не знаю, можно ли сделать это по-другому?

Заранее спасибо.

Моя таблица:

MyTestTabel

1 Ответ

1 голос
/ 29 мая 2020

SQL Сервер реализует синтаксис merge , который кажется актуальным для вашего варианта использования.

Этот оператор позволяет insert или update из одной таблицы в данной таблице в соответствии с четко определенными предикатами.

Для вашего вопроса это будет:

merge mytable as t
using (values (15210049000887900,5210132138457,1)) as s(sscc, styleBarcode, qty)
on (t.sscc = s.sscc and t.styleBarcode = s.styleBarcode)
when matched then 
    update set t.qty = t.qty + 1  -- or t.qty = t.qty + s.qty?
when not matched then 
    insert(sscc,styleBarcode,qty) values(s.sscc, s.styleBarcode, s.qty)
;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...