如果不是EXISTS则INSERT,但如果EXISTS则删除

时间:2011-02-04 21:46:06

标签: sql sql-server sql-server-2005 tsql

如果foreignKey和foreignKey2尚不存在,我有以下查询来更新设置new foreignKey的表记录。这应该很好,但是,如果它存在,我如何修改删除特定的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
)

2 个答案:

答案 0 :(得分:4)

您可以删除它是否存在,并且只插入(而不是更新,因为该记录不存在而无法删除)。但目前尚不清楚第三个值应该是什么。

DELETE tbl where pkID = 1234;
if @@ROWCOUNT = 0
    INSERT tbl(foreignKey, pkID, foreignKey2)
    VALUES (2, 1234, ??)

答案 1 :(得分:0)

您需要MERGE。看看here(有一个相同任务的例子)