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
如果字段 "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