Да.Этого достаточно.Установка уровня изоляции транзакции в serializable создаст блокировки ключа, которые охватывают SomeId=@SomeId
при запуске select, что не позволит другим процессам вставлять значения с тем же ключом (SomeId=@SomeId
) во время выполнения транзакции.
Подсказка WITH(UPDLOCK)
заставит SELECT получить блокировку обновления для выбранных строк, если они существуют.Это не позволит другим транзакциям изменять эти строки (если они существовали на момент выбора) во время выполнения вашей транзакции.
Не похоже, что вам действительно нужен WITH(UPDLOCK)
подсказка, так как высовершить транзакцию сразу, если запись уже существует.Если вы хотели сделать что-то еще перед фиксацией, если запись существует, вам может понадобиться эта подсказка - но на самом деле, похоже, вы этого не делаете.