如果sql中存在一行,则不应执行更新

时间:2017-11-30 13:05:40

标签: sql sql-server

我有一个基于条件的查询更新了一个包含多行的表。但每次运行查询时,它都会复制所有相同的数据:

.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不进行插入?

2 个答案:

答案 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