Если есть (или вы можете создать) уникальное ограничение для комбинации столбцов SomeId
и SomeOtherId
, то вы можете использовать UPSERT
следующим образом:
INSERT INTO TableName(SomeId, SomeOtherId, SomeColumn)
VALUES(@SomeId, @SomeOtherId, @SomeValue)
ON CONFLICT(SomeId, SomeOtherId) DO
UPDATE SET SomeColumn = @SomeValue;
Если нет, то используйте 2 оператора:
UPDATE TableName
SET SomeColumn = @SomeValue
WHERE SomeId = @SomeId AND SomeOtherId = @SomeOtherId;
INSERT INTO TableName (SomeId, SomeOtherId, SomeColumn)
SELECT @SomeId, @SomeOtherId, @SomeValue
WHERE NOT EXISTS (
SELECT 1 FROM TableName
WHERE SomeId = @SomeId AND SomeOtherId = @SomeOtherId
);
Оператор UPDATE
будет успешным, только если в указанных вами условиях есть строка, в противном случае он ничего не будет делать. Оператор INSERT
будет успешным, только если в указанных вами условиях нет строки, иначе он ничего не будет делать.