sql 服务器 - 检查插入中每一行的存在

sql server - checking existence for each row in insert

如果字段 "partita_iva" 已经在此 table 中,我需要插入并检查每一行,如果是,则字段 "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

暗中刺杀:

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;

你当前的查询逻辑对我来说似乎是正确的,但你可以关联你的子查询:

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