Isso é para o SQL Server.
Cada instrução é atômica, mas se você deseja que o procedimento armazenado seja atômico (ou qualquer sequência de instruções em geral), é necessário cercar explicitamente as instruções com
COMEÇAR TRANSAÇÃO
Declaração ...
Declaração ...
COMMIT TRANSACTION
(É comum usar BEGIN TRAN e END TRAN para abreviar.)
É claro que existem muitas maneiras de entrar em problemas de bloqueio, dependendo do que mais está acontecendo ao mesmo tempo, então você pode precisar de uma estratégia para lidar com transações com falha. (Uma discussão completa de todas as circunstâncias que podem resultar em bloqueios, não importa como você conceba esse SP específico, está além do escopo da questão.) Mas eles ainda poderão ser reenviados por causa da atomicidade. E na minha experiência você provavelmente ficará bem, sem saber sobre seus volumes de transações e outras atividades no banco de dados. Desculpe-me por dizer o óbvio.
Ao contrário de um equívoco popular, isso funcionará no seu caso com as configurações padrão de nível de transação.