我有一個過程,我不想跟蹤是否有創建或更新。跟蹤將是複雜的。我想執行創建或更新。該模式是像...如何在T-SQL中編寫簡單的插入或更新?
col1 varchar() (PK)
col2 varchar() (PK)
col3 varchar() (PK)
col4 varchar()
我想這樣做
TRY
{
INSERT ...
}
CATCH(DuplicateKeyException)
{
UPDATE ...
}
你有什麼建議?
我想確保我瞭解其他頂級投票答案。根據我的模式,UPDATE總是會發生(即使是使用INSERT),但插入只發生在不存在的地方?
//UPSERT
INSERT INTO [table]
SELECT [col1] = @col1, [col2] = @col2, [col3] = @col3, [col4] = @col4
FROM [table]
WHERE NOT EXISTS (
-- race condition risk here?
SELECT 1
FROM [table]
WHERE [col1] = @col1
AND [col2] = @col2
AND [col3] = @col3
)
UPDATE [table]
SET [col4] = @col4
WHERE [col1] = @col1
AND [col2] = @col2
AND [col3] = @col3
您使用的是什麼RDBMS(包括版本)? –
AKA [upsert](http://en.wikipedia.org/wiki/Upsert)。 – Oded
對不起,SQL 2000.更新後。 –