none
criação de um LOG RRS feed

  • Pergunta

  • Pessoal, tenho procedures que fazem update em 2 tabelas.

    O primeiro passo foi construí-las ( urgencia definido por meus superiores p entregar num prazo curto )

     

    Agora estou vendo a necessidade de "construir" um controle desses updates...tipo...se nao atualizar nenhum registro, preciso saber disso. Porque existe um cursor q é varrido e consequentemente todas as cidades encontradas nele terao de ser atualizadas na "tabela fim" mas ja reparei q algumas vezes isso nao ocorre, por motivos que nao cabe expor aqui agora...

     

    A solucao que pensei foi criar uma tabela de log de transacoes e fazer insert nas mesmas toda vez q fosse feito um update...é isso mesmo? é a melhor coisa a se fazer?

     

    obrigado

    quarta-feira, 3 de dezembro de 2008 18:01

Respostas

  • Olá Esquerdo,

     

    Toda vez que você executa um comando de update, select, insert ou delete há uma quantidade de linhas afetadas. Se você por exemplo inserir uma linha haverá uma linha afetada. Se você atualizar 50 linhas haverá 50 linhas afetadas e assim por diante. Você pode capturar essa informação com o @@rowcount. Ex:

     

    Code Snippet

    declare @t table (codigo int)

     

    -- Insere uma linha

    insert into @t values (1)

     

    -- Retorna uma linha afetada

    SELECT @@rowcount

     

    -- Insere outra linha

    insert into @t values (2)

     

    -- Retorna uma linha afetata

    SELECT @@rowcount

     

    -- Exclui todas as linhas

    DELETE FROM @t

     

    -- Retorna duas linhas afetadas

    SELECT @@rowcount

     

     

    [ ]s,

     

    Gustavo

     

    quarta-feira, 3 de dezembro de 2008 18:37
  • Olá Esquerdo,

     

    Teste o @@rowcount a cada update executado.

    Os que o @@rowcount retornar zero é porque não houve registros atualizados.

     

    [ ]s,

     

    Gustavo

     

    quarta-feira, 3 de dezembro de 2008 19:12

Todas as Respostas

  • Olá Esquerdo,

     

    Creio que essa é uma boa solução. Para verificar se houve atualização, procure utilizar o @@rowcount.

     

    [ ]s,

     

    Gustavo

    quarta-feira, 3 de dezembro de 2008 18:16
  • Como assim?

     

     

     

     

    quarta-feira, 3 de dezembro de 2008 18:30
  • Olá Esquerdo,

     

    Toda vez que você executa um comando de update, select, insert ou delete há uma quantidade de linhas afetadas. Se você por exemplo inserir uma linha haverá uma linha afetada. Se você atualizar 50 linhas haverá 50 linhas afetadas e assim por diante. Você pode capturar essa informação com o @@rowcount. Ex:

     

    Code Snippet

    declare @t table (codigo int)

     

    -- Insere uma linha

    insert into @t values (1)

     

    -- Retorna uma linha afetada

    SELECT @@rowcount

     

    -- Insere outra linha

    insert into @t values (2)

     

    -- Retorna uma linha afetata

    SELECT @@rowcount

     

    -- Exclui todas as linhas

    DELETE FROM @t

     

    -- Retorna duas linhas afetadas

    SELECT @@rowcount

     

     

    [ ]s,

     

    Gustavo

     

    quarta-feira, 3 de dezembro de 2008 18:37
  • Ao invez de criar uma tabela para verificar se o update afetou algum registro,

    Crie um parâmetro de saida na proc, e retorne o valor de @@RowCount nele...
    quarta-feira, 3 de dezembro de 2008 18:41
  • Entendi Gustavo, obrigado pela resposta.

     

    Mas a minha procedure esta montada da seguinte forma...

     

    Tenho um select que é carregado dentro de um cursor.

     

    Nisso eu varro o cursor e com as informacoes retornadas no select eu vou atualizando uma tabela.

     

    Dessa forma nao vejo como saber se algum dos registros nao foi atualizado.

     

    Ressalto que se o select retornar 10 registros, o update sera feito em 10 liinhas tambem.

     

    quarta-feira, 3 de dezembro de 2008 19:01
  • Olá Esquerdo,

     

    Teste o @@rowcount a cada update executado.

    Os que o @@rowcount retornar zero é porque não houve registros atualizados.

     

    [ ]s,

     

    Gustavo

     

    quarta-feira, 3 de dezembro de 2008 19:12
  • Agora saquei. Valeu! Vou implementar e testar.

    obrigado!

     

    quarta-feira, 3 de dezembro de 2008 19:19