2011-02-04 106 views
2

我有以下查询更新表记录设置新的外键,如果该外键和外键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 
) 
+0

您插入,如果它不存在,不更新。 – 2011-02-04 21:50:19

+0

所以你想做一个破坏性的upsert? `MERGE`在2008年会有帮助,但在2005年.. – RichardTheKiwi 2011-02-04 22:02:31

回答

0

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

4

你可以删除它是否存在,只有插入(而不是更新,因为记录不存在被删除)否则。但不清楚第三个值应该是什么。

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