none
Consulta SQL com retorno "fora do esperado" RRS feed

  • Pergunta

  • Boa tardegalera,

     Estou com uma certa dificuldade e não consigo achar a solução, até para formular a pergunta é muito estranho, mas assim: Eu tenho um conjunto de dados que vem de uma tabela, se eu não filtrar a tabela eu não vejo (NÃO VEJO) uma determinada linha, porém se eu usar o filtro esta linha aparece, é muito estranho..

    select a.cd_cadastro, a.nr_pedido 
      from Compras a                                 
     Where 1=1
       and a.cd_cadastro = 2967
       --and a.nr_pedido = 88334
     order by nr_pedido desc

    Veja que a compra de numero 88334 não esta no resultado ( e acreditem não esta escondido );;;

    Agora se eu passar somente a compra 88334 ele aparece

    select a.cd_cadastro, a.nr_pedido 
      from Compras a                                 
     Where 1=1
       and a.cd_cadastro = 2967
       and a.nr_pedido = 88334
     order by nr_pedido desc
    

    A Coluna nr_pedido é INT primary key.

    Como é possível isso ?

    SQL SERVER Express 2008 R2 10.50.4000


    Abraços http://joseluiz.net

    terça-feira, 18 de setembro de 2018 20:56

Respostas

  • Olá, Jose!

       Acredito que o problema esteja na coluna a.cd_cadastro. Na primeira consulta, o banco de dados deve utilizar um índice X, e na segunda, um índice Y (talvez um índice composto que você criou). Provavelmente o índice da primeira consulta (que chamei de X) está corrompido, mas o outro não, e por isso traz o resultado. Execute as duas consultas exibindo o plano de execução, a fim de descobrir qual é o índice utilizado na primeira consulta. Provavelmente você terá de recriar este índice. Se tiver dúvidas ainda, poste aqui o plano de execução das duas consultas, para que possamos te auxiliar.

    Espero que ajude. Bom trabalho!

    • Marcado como Resposta Jose Luiz Borges quarta-feira, 19 de setembro de 2018 21:52
    quarta-feira, 19 de setembro de 2018 00:24
  • Opa obrigado por responder, olhaeu analisei o plano, aparentemente os índices estavam certos, 

    retirei outros indices da tabela, ficando apenas a PK (indice clusterizado).

    O problema persistiu, não é possível, (pensei)...

    Então o que eu fiz:

    1. backup (claro)

    2. removi a PK da tabela e de todas as outras tabelas referenciadas a ela...

    e então... o registro sumiu!, sim o pedido em questão não existe mais..

    Única explicação possível.

    Em algum momento o software não compeltou algum commit, ficou com alguma transação aberta, e "algo" aconteceu no banco..

    Recriei a PK e FK das outras tabelas e vamos ficar de olho...

    Obrigado pela dica


    Abraços http://joseluiz.net

    • Marcado como Resposta Jose Luiz Borges quarta-feira, 19 de setembro de 2018 21:52
    quarta-feira, 19 de setembro de 2018 21:52

Todas as Respostas

  • Olá, Jose!

       Acredito que o problema esteja na coluna a.cd_cadastro. Na primeira consulta, o banco de dados deve utilizar um índice X, e na segunda, um índice Y (talvez um índice composto que você criou). Provavelmente o índice da primeira consulta (que chamei de X) está corrompido, mas o outro não, e por isso traz o resultado. Execute as duas consultas exibindo o plano de execução, a fim de descobrir qual é o índice utilizado na primeira consulta. Provavelmente você terá de recriar este índice. Se tiver dúvidas ainda, poste aqui o plano de execução das duas consultas, para que possamos te auxiliar.

    Espero que ajude. Bom trabalho!

    • Marcado como Resposta Jose Luiz Borges quarta-feira, 19 de setembro de 2018 21:52
    quarta-feira, 19 de setembro de 2018 00:24
  • Opa obrigado por responder, olhaeu analisei o plano, aparentemente os índices estavam certos, 

    retirei outros indices da tabela, ficando apenas a PK (indice clusterizado).

    O problema persistiu, não é possível, (pensei)...

    Então o que eu fiz:

    1. backup (claro)

    2. removi a PK da tabela e de todas as outras tabelas referenciadas a ela...

    e então... o registro sumiu!, sim o pedido em questão não existe mais..

    Única explicação possível.

    Em algum momento o software não compeltou algum commit, ficou com alguma transação aberta, e "algo" aconteceu no banco..

    Recriei a PK e FK das outras tabelas e vamos ficar de olho...

    Obrigado pela dica


    Abraços http://joseluiz.net

    • Marcado como Resposta Jose Luiz Borges quarta-feira, 19 de setembro de 2018 21:52
    quarta-feira, 19 de setembro de 2018 21:52