如果不存在则插入,但如果已存在则删除

3
我有以下查询来更新表记录,如果外键和外键2不存在,则设置新的外键。这应该很好地工作,但是如果它存在,我该如何修改以删除该特定pkID记录?
表结构:
+----------------+
| table          |
+----------------+
| pkID           |
| foreignKey     |
| foreignKey2    |
+----------------+

查询:

UPDATE table a
SET a.foreignKey = 2
WHERE a.pkID = 1234
AND NOT EXISTS (
   SELECT 1
   FROM   table b
   WHERE  b.foreignKey = 2
   AND  b.foreignKey2 = a.foreignKey2
)

如果不存在,你应该插入(INSERT),而不是更新(UPDATE)。 - OMG Ponies
所以你想要进行破坏性的upsert操作?2008年的MERGE可以帮助你,但对于2005年来说... - RichardTheKiwi
2个回答

4
您可以删除已存在的内容,否则只能插入(因为记录不存在需要被删除)。但第三个值的含义并不明确。
DELETE tbl where pkID = 1234;
if @@ROWCOUNT = 0
    INSERT tbl(foreignKey, pkID, foreignKey2)
    VALUES (2, 1234, ??)

0
你需要MERGE。 在这里看一下示例(有一个相同的任务)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接