У меня есть процесс, который я не хочу отслеживать, является ли что-то созданием или обновлением.Отслеживание будет сложным.Я хотел бы выполнить обновление ИЛИ создания.Схема как ...
col1 varchar() (PK)
col2 varchar() (PK)
col3 varchar() (PK)
col4 varchar()
Я думаю о
TRY
{
INSERT ...
}
CATCH(DuplicateKeyException)
{
UPDATE ...
}
Что вы предлагаете?
Я хочу убедиться, что я понимаю ответ другого топ-проголосовавшего.Учитывая мою схему, ОБНОВЛЕНИЕ всегда происходит (даже с ВСТАВКОЙ), но вставка происходит только там, где ее нет?
//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