我有一个基于条件的查询更新了一个包含多行的表。但每次运行查询时,它都会复制所有相同的数据:
.save()
因此,每次运行上述查询时,它都会复制名为ID 10000的数据,并将其放入名称为50000的新行中,并递增ID。 因此,如果此查询第一次运行,它将在第二次运行时运行正常,则执行以下操作
SET IDENTITY_INSERT table ON
INSERT INTO table(ID,NameID,tag)
SELECT
(SELECT MAX(ID) FROM table) + ROW_NUMBER()OVER (ORDER BY ID),
50000,
tag
FROM Table
WHERE NameID = 10000
SET IDENTITY_INSERT table OFF
如何告诉它检查表中是否存在50000不进行插入?
答案 0 :(得分:1)
我不知道你为什么要关闭身份插入。这似乎打败了identity
专栏的目的。但是,这不是你问题的核心。
您可以使用not exists
:
INSERT INTO table (ID, NameID, tag)
SELECT (SELECT MAX(ID) FROM table) + ROW_NUMBER()OVER (ORDER BY ID),
50000, tag
FROM Table t
WHERE NameID = 10000 AND
NOT EXISTS (SELECT 1 FROM table t2 WHERE t2.NameId = t50000 AND t2.tag = t.tag);
答案 1 :(得分:0)
我相信你可以使用“if not exists”这个案例
if not exists("condition") begin "insert" end