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

Posted

技术标签:

【中文标题】如果存在并满足多个条件,如何更新行,否则如何在 SQL Server 中插入【英文标题】:How to update row if exist and meet more than one condition and insert it otherwise in SQL Server 【发布时间】:2020-05-28 21:27:41 【问题描述】:

我正在尝试执行我在线程 here 中找到的以下代码

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)

但我做不到,因为我在 SQL Server 中没有 ROW_COUNT() 之类的东西。

或者我不知道你是否可以用其他方式完成它?

提前致谢。

我的桌子:

【问题讨论】:

TSQL 说@@RowCount。并且请不要发布数据图片,除非您希望将查询作为答案的艺术印象。 @HABO 表示感谢,以后不做了,谢谢指教。 【参考方案1】:

SQL Server 实现了the merge syntax,这似乎与您的用例相关。

此语句允许您根据明确定义的谓词将insertupdate 从一个表转换为给定表。

对于您的问题,应该是:

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

【讨论】:

非常感谢,它对我有用。我希望我能成功地使用参数而不是 15210049000887900,5210132138457,1 在我的 C# 代码中组合它。我可以这样做吗?你能解释一下这段代码是如何工作的吗?我对 MERGE 声明有点陌生。再次感谢

以上是关于如果存在并满足多个条件,如何更新行,否则如何在 SQL Server 中插入的主要内容,如果未能解决你的问题,请参考以下文章

如果存在,我需要更新,否则使用 Linq 插入 SQL

如果条件满足则选择 A 行,否则为每个组选择 B 行

excel满足多个条件后返回固定值并求和怎么用函数实现?

如何更新 json 类型的 json 中的任何字段?它应该接受一个对象或一个键数组,如果它存在则更新键,否则创建

如果存在如何更新,否则插入新文档?

如果存在如何更新,否则插入新文档?