繁体   English   中英

sql server - 检查插入中每一行的存在

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM