[英]sql server - checking existence for each row in insert
如果该表中已经存在字段“partita_iva”,我需要对每一行进行插入和检查,如果是,则字段“标志”必须为 1,否则必须为 0。我这样做了,但它为所有行,即使只有一行应该是 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
您当前的查询逻辑对我来说似乎是正确的,但您可以关联您的子查询:
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()
是一个函数,它将创建一个类型为 uniqueidentifier 的唯一值。
大概可以简化一下。
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
作为在黑暗中的总刺:
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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.