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

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

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

  1. UPDATE MyGuests
  2. SET lastname = 'Doe'
  3. WHERE id = 2
  4. IF ROW_COUNT() = 0
  5. INSERT INTO MyGuests (lastname, id)
  6. VALUES ('Doe', 2)

问题是,我需要做同样的事情,但与sql server查询。我在这里的主要想法是,如果新的阅读有相同的 BoxNo 同样的道理 SSCC 同样的道理 StyleBarcode ,则 Qty 列将由+1更新。否则,它将生成一个新的插入。
我在考虑做如下代码:

  1. UPDATE MyTable
  2. SET Qty = Qty + 1
  3. WHERE BoxNo = 1
  4. AND SSCC = 15210049000887900
  5. AND StyleBarcode = 5210132138457
  6. IF ROW_COUNT() = 0
  7. INSERT INTO MyTable (SSCC, StyleBarcode, Qty)
  8. VALUES (15210049000887900, 5210132138457, 1)

但我没能去,因为我没有像 ROW_COUNT() 在sql server中。
或者我不知道你能不能换个方法?
提前谢谢。
我的table:

oewdyzsn

oewdyzsn1#

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

  1. merge mytable as t
  2. using (values (15210049000887900,5210132138457,1)) as s(sscc, styleBarcode, qty)
  3. on (t.sscc = s.sscc and t.styleBarcode = s.styleBarcode)
  4. when matched then
  5. update set t.qty = t.qty + 1 -- or t.qty = t.qty + s.qty?
  6. when not matched then
  7. insert(sscc,styleBarcode,qty) values(s.sscc, s.styleBarcode, s.qty)
  8. ;

相关问题