none
INTERRUPÇÃO NA EXECUÇÃO DE STORED PROCEDURE RRS feed

  • 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

    terça-feira, 4 de novembro de 2014 12:07

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
    terça-feira, 4 de novembro de 2014 13:00

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
    terça-feira, 4 de novembro de 2014 13:00
  • 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"

    quarta-feira, 5 de novembro de 2014 10:58
    Moderador
  • 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

    quarta-feira, 5 de novembro de 2014 12:39