如果存在并满足多个条件,如何更新行,否则如何在 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,这似乎与您的用例相关。
此语句允许您根据明确定义的谓词将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)
;
【讨论】:
非常感谢,它对我有用。我希望我能成功地使用参数而不是15210049000887900,5210132138457,1
在我的 C# 代码中组合它。我可以这样做吗?你能解释一下这段代码是如何工作的吗?我对 MERGE 声明有点陌生。再次感谢以上是关于如果存在并满足多个条件,如何更新行,否则如何在 SQL Server 中插入的主要内容,如果未能解决你的问题,请参考以下文章