如果行存在并满足多个条件,则如何更新行,否则如何在SQLServer中插入行

pinkon5k  于 2021-08-13  发布在  Java
关注(0)|答案(1)|浏览(423)

我正在尝试执行下面的代码,我在这里的一个线程中找到了它

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

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

问题是,我需要做同样的事情,但与sql server查询。我在这里的主要想法是,如果新的阅读有相同的 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 server中。
或者我不知道你能不能换个方法?
提前谢谢。
我的table:

oewdyzsn

oewdyzsn1#

sql server实现 merge 语法,它似乎与您的用例相关。
这句话让你 insert 或者 update 根据定义良好的 predicate ,从一个表到给定的表。
你的问题是:

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)
;

相关问题