Eu deixo um loop while ser executado no fim de semana com uma condição CURRENT_TIMESTAMP nele, o problema é que eu acidentalmente configurei a condição para 2020-08-06 em vez de 2020-06-08 (oops). Existe alguma maneira de sair manualmente do loop e visualizar os resultados até agora? Não acho que seja possível alterar a hora do sistema para que o loop exista, pois o servidor SQL não é executado localmente.
relate perguntas
-
Como alterar as configurações do gerenciador de configuração do servidor SQL usando o TSQL?
-
Como posso obter uma lista de nomes e tipos de coluna de um conjunto de resultados?
-
MS SQL: Use o valor calculado para calcular outros valores
-
Como posso saber se um banco de dados SQL Server ainda está sendo usado?
-
Implementando uma consulta PIVOT
O sucesso dependerá muito de onde os resultados são armazenados. Se eles forem gravados em uma tabela normal, você poderá simplesmente consultar essa tabela. Se houver uma transação aberta que bloqueie novas consultas, use a dica NOLOCK. Se você estiver usando o isolamento de instantâneo, não sei como obter os dados com versão da transação aberta.
Se todos os resultados estiverem em tabelas temporárias, você terá mais dificuldade. Essas tabelas têm o escopo da sessão, portanto, acessá-las de uma sessão diferente será complicado.
Você pode procurar nos metadados do TempDB para encontrar o nome completo da tabela e consultar isso explicitamente. Não sei se vai funcionar, nunca tentei.(Eu tentei; não funciona.)Se o código estiver sendo executado por meio do SSMS, você poderá interromper a execução sem encerrar a sessão. Isso deixará as tabelas temporárias intactas e disponíveis para a sessão. Cancele usando o menu Query -> Cancel Executing Query (mapeado para o quadrado vermelho na barra de ferramentas). Se houver uma transação aberta, essa transação permanecerá aberta. Você terá que confirmá-lo manualmente ou revertê-lo.
O cancelamento é obtido enviando uma mensagem de "atenção" ao SQL Server. Outros clientes podem ou não suportar isso. A partir de um ambiente de script (por exemplo, Powershell, Python), se a consulta foi enviada de forma assíncrona, pode ser possível chamar o método "Cancelar" (ou equivalente) na conexão original ou no objeto de consulta.
Com direitos de acesso suficientemente altos, você pode observar as estruturas em disco. Paul White escreveu um método aqui . Dependendo de quanto foi escrito, pode demorar tanto para transcrever os despejos de DBCC PAGE quanto para reexecutar a consulta.
Se os resultados estiverem em variáveis, você poderá conectar um depurador ao processo do SQL Server, pausar sua execução e procurar. Boa sorte com isso. Se houver outros usuários no sistema ou atividades em segundo plano do sistema, pode ser difícil distinguir os valores desejados de todos os outros presentes. Certamente, não é documentado ou suportado de forma alguma. NÃO tente isso em uma instância de produção compartilhada.
Por fim, se você estiver usando o SSMS, dê uma olhada na guia de mensagens. Você nunca sabe, quem escreveu o script pode ter colocado instruções PRINT para acompanhar o progresso.
Terminar o loop é fácil. Encontre o SPID na guia SSMS ou DMVs ( sys.dm_exec_sessions et al ) e emita
KILL session_id
. Infelizmente, ele encerrará o script completamente, perdendo variáveis locais e tabelas temporárias e desconectando a sessão de destino. Qualquer transação aberta terá que ser revertida, o que levará aproximadamente o mesmo tempo que a transação estiver aberta, mais ou menos.