sql server - 检查插入中每一行的存在
Posted
技术标签:
【中文标题】sql server - 检查插入中每一行的存在【英文标题】:sql server - checking existence for each row in insert 【发布时间】:2019-12-18 11:38:16 【问题描述】:如果字段“partita_iva”已在此表中,我需要插入并检查每一行,如果是,则字段“flag”必须为 1,否则必须为 0。我这样做了,但是为所有行设置 1,即使应该为 1 只为一行
INSERT INTO tab2(id, flag)
select newid,
CASE
WHEN EXISTS(SELECT * FROM tab1 WHERE partita_iva IN(SELECT partita_iva FROM tab2))
THEN 1
ELSE 0
END AS flag
from tab1
【问题讨论】:
样本数据和期望的结果会有所帮助。你的代码很不清楚。 您要检查什么,是否存在名为 partita_iva 的列或 partita_iva 上的某些值是否存在?请清楚地提出问题。 @SagarTimalsina 我想检查 partita_iva 上的值是否存在,如果已经存在一个值,我必须将该值的标志设置为 1,使用我提供的代码,所有行都有 1即使它应该是 1 只是一行 【参考方案1】:大概可以简化一下。
INSERT INTO tab2 (id, flag)
SELECT t1.newid
, IIF(EXISTS(SELECT 1 FROM tab2 t2 WHERE t2.partita_iva = t1.partita_iva), 1, 0) AS flag
FROM tab1 t1
【讨论】:
【参考方案2】:您当前的查询逻辑对我来说似乎是正确的,但您可以关联您的子查询:
INSERT INTO tab2(id, flag)
SELECT NEWID(), CASE WHEN EXISTS(SELECT 1
FROM tab2 t2
WHERE t2.partita_iva = t1.partita_iva
)
THEN 1 ELSE 0
END AS flag
FROM tab1 t1;
NEWID()
是一个创建唯一标识符类型的唯一值的函数。
【讨论】:
【参考方案3】:作为一个在黑暗中的总刺:
INSERT INTO tab2(Id,Flag)
SELECT newid, --Do you mean NEWID()?
CASE WHEN EXISTS(SELECT 1 FROM tab2 T2 WHERE T2.partita_iva = T1.partita_iva) THEN 1 ELSE 0 END
FROM tab1 T1;
【讨论】:
以上是关于sql server - 检查插入中每一行的存在的主要内容,如果未能解决你的问题,请参考以下文章
如何在合并数据集之前检查行是不是存在(SQL Server)
在 SQL Server 中检查逗号分隔字符串中是不是存在子字符串的最有效方法