Se eu inserir TSQL no editor de consulta do SSMS, sei que posso "percorrer" as instruções (ou seja, executá-las uma de cada vez) destacando uma instrução e pressionando F5 no teclado.
Parece que, por padrão, essa sessão não tem uma transação aberta. Cada execução é comprometida.
Eu posso escrever meu TSQL para que ele comece BEGIN TRAN
e termine com um COMMIT
ou ROLLBACK
- e isso garante que, conforme eu passo, eu tenha a opção de voltar atrás nas alterações.
No entanto, o problema que tenho é quando declaro variáveis. Considerar:
declare @flag bit = 0;
select case when @flag = 0 then 'off' when @flag = 1 then 'on' end as FlagCheck;
Independentemente de o acima estar envolvido em uma transação, se eu executar a primeira instrução por conta própria, então a próxima instrução por conta própria, a segunda instrução falhará porque a variável não foi declarada.
É possível percorrer um código como este e fazer com que o SSMS entenda que os efeitos da instrução anterior (declarar a variável e atribuir um valor) devem ser transferidos para a próxima etapa? (Mais uma vez, mesmo se envolvido em uma transação, essa persistência de variáveis falha - mesmo que a persistência da atualização de dados seja dependente da resolução da transação - commit ou rollback).
Toda vez que você enviar texto do SSMS, o lote terminará quando terminar de executar e quaisquer variáveis ficarão fora do escopo.
A única maneira de fazer isso é usando o depurador conforme ilustrado abaixo. Em seguida, você pode percorrer linha por linha usando as teclas F10 ou F11. Isso só deve ser usado em um ambiente de desenvolvimento.
Além disso (como apontado por @clifton_h) esse recurso foi removido do SSMS 18.x, mas ainda está disponível na versão mais recente do GA ( atualmente 17.9.1 )