Usuário com melhor resposta
INTERRUPÇÃO NA EXECUÇÃO DE STORED PROCEDURE

Pergunta
-
Bom dia pessoal.
Estou com um problema intermitente, que não consegui identificar o problema após debugar muitas vezes. Há momentos que parece que a SP interrompe a execução. Existem vários scripts independentes na SP, mas a interrupção nem sempre é no mesmo ponto.
Chamo uma SP que vai chamando outras conforme a necessidade até retornar para o micro cliente o sucesso.
Pergunta: Como funciona a execução das SP se a conexão entre o Cliente e Servidor cair?
Se o cliente executar a primeira SP e durante as chamadas e execuções das demais SP a rede cair o que acontece? A execução no servidor é afetada? Porque tudo está sendo executado no servidor e o cliente está aguardando...
Rodrigo Marchese rodrigomarchese@msn.com
Respostas
-
Rodrigo,
Embora a SP seja executada no servidor, se a conexão cair a SP irá parar.
Se na sua SP tiver transação será executado o rollback, caso contrario as alterações que foram feitas até o momento da perda da conexão permanecerão.
Tulio Rosa | http://tuliorosa.com.br | Se resolveu seu problema, marque como resposta ou vote
- Marcado como Resposta RodrigoM quarta-feira, 5 de novembro de 2014 12:39
Todas as Respostas
-
Rodrigo,
Embora a SP seja executada no servidor, se a conexão cair a SP irá parar.
Se na sua SP tiver transação será executado o rollback, caso contrario as alterações que foram feitas até o momento da perda da conexão permanecerão.
Tulio Rosa | http://tuliorosa.com.br | Se resolveu seu problema, marque como resposta ou vote
- Marcado como Resposta RodrigoM quarta-feira, 5 de novembro de 2014 12:39
-
RodrigoM,
Como o Tulio indicou, caso a conexão "caia" então o processamento do contexto de execução da procedure será encerrado, porém se você utiliza "transações" será executado o ROLLBACK, senão utiliza "transações"então tudo o que foi manipulado até o momento será executado.
Em casos como este é muito importante utilizar transações para manter a integridade dos dados e a consistência das operações, isto porque o usuário de seu sistema poderá em determinadas situações acreditar que os dados foram atualizados ou armazenados como esperado e na verdade parte esta "perdida".
Lembrando que você poderá criar ou não uma transação para cada procedure, mas sempre a primeira procedure deve ter transações.
Recomendo que você faça uma análise de seu script T-SQL para verificar a real necessidade de manter várias procedures "especialistas" (que manipulam apenas um determinado tipo de informação) e veja a possibilidade de utilizar um tratamento de erro para evitar que algumas falhas que podem ser contornadas na procedure retornem um erro para o usuário do seu sistema.
Para maiores informações veja:
http://msdn.microsoft.com/pt-br/library/ms188929.aspx
http://msdn.microsoft.com/pt-br/library/ms190295.aspx
http://msdn.microsoft.com/pt-br/library/ms181299.aspx
http://msdn.microsoft.com/pt-br/library/ms175976.aspx
http://technet.microsoft.com/pt-br/library/ms179296(v=sql.105).aspx
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval Ramos
Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
----------------------------------
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Sugerido como Resposta Ricardo Barbosa Cortes quarta-feira, 5 de novembro de 2014 12:39
- Não Sugerido como Resposta Ricardo Barbosa Cortes quarta-feira, 5 de novembro de 2014 17:59
-
Obrigado pelo retorno pessoal.
Para testar, criei uma SP com uma estrutura de repetição dando INSERT em uma tabela. Simulei um ambiente cliente/servidor entre dois micros, e...., realmente, ao interromper a conexão, a quantidade de registros vindos do insert que estava na sp do servidor parou no mesmo momento.
Abraço
Rodrigo Marchese rodrigomarchese@msn.com