2011-02-04 49 views
2

テーブルレコードを更新するために、そのforeignKeyとforeignKey2が存在しない場合に新しいforeignKeyを設定するための次のクエリがあります。しかし、これはうまくいくはずですが、その特定のpkIDレコードが存在する場合は、それを削除するためにどのように変更できますか?存在しない場合はINSERT、存在する場合は削除

テーブル構造:

+----------------+ 
| 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

INSERTがまだ存在しない場合は更新しません。 –

+0

あなたは破壊的なアップサーートをしたいですか? 2008年の 'MERGE'はここで助けてくれましたが、2005年です。 – RichardTheKiwi

答えて

0

あなたはMERGEを必要としています。 here(同じタスクの例があります)

+1

** 2005年に**存在しません – RichardTheKiwi

+0

私はそれが2005年に存在するかどうかチェックしませんでした... – a1ex07

4

存在する場合は削除し、そうでない場合は削除するレコードが存在しないため、更新の代わりに削除することができます。しかし、第3の価値がどのようなものであるべきかは明確ではありません。

DELETE tbl where pkID = 1234; 
if @@ROWCOUNT = 0 
    INSERT tbl(foreignKey, pkID, foreignKey2) 
    VALUES (2, 1234, ??) 
関連する問題