1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

O fantasma do SQL

Discussão em 'Programação' iniciada por [C4], 14 de Novembro de 2008. (Respostas: 9; Visualizações: 941)

  1. [C4]

    [C4] Power Member

    Venho aqui colocar uma situação caricata, e para a qual ainda nao consegui uma explicacao convincente:
    Na tabela1 existem os clientes B e C
    A tabela1 tem os campos campo1, campo2, campo3

    select * from tabela1 where campo1='B' retorna dados
    select campo1 from tabela1 where campo1='B' nao retorna dados
    select campo2 from tabela1 where campo1='B' nao retorna dados
    select campo1,* from tabela1 where campo1='B' retorna dados


    select * from tabela1 where campo1='C' retorna dados
    select campo1 from tabela1 where campo1='C' retorna dados.
    select campo2 from tabela1 where campo1='C' retorna dados.
    select campo1,* from tabela1 where campo1='C' retorna dados

    Ideias???
     
  2. RADguy

    RADguy Power Member

    Que motor de base de dados estás a usar?

    Ora mostra um dump dos registos dessa tabela, talvez assim seja mais fácil ajudar.
     
  3. [C4]

    [C4] Power Member

    MS SQL2000
    Explica-me melhor o que entendes por dump dos registos...
     
  4. RADguy

    RADguy Power Member

    O dump, é uma exportação dos registos dessa tabela.

    Mas estive aqui a fazer o teu exemplo em MS SQL server 2008 com esta estrutura e dados:

    CREATE tabela1 [dbo].[Table_1](
    [Campo1] [nchar](10) NULL,
    [Campo2] [nchar](10) NULL)

    Campo1|Campo2
    --------------------
    B |B
    B |C
    C |C
    C |B

    e todos os teus Queries retornam dados.
     
  5. [C4]

    [C4] Power Member

    o estranho é mesmo a parte em que nao retorna dados...
    Se criar outra tabela igual, copiar tudo la para dentro, ja funca tudo.
    Agora, porque é que naquela tabela especifica nao funciona va-se la saber porque.

    Pensei que fossse algum trigger que estivesse a bater. Nao há triggers na tabela.
    Poderia ser uma view. Não é.
    Tambem nao existe nenhuma funcao com este nome. Alias, nao existe mais nenhum objecto na base de dados com este nome.

    A unica hipotese que estou a ponderar, mas na qual nao acredito, é um problema qualquer com o sector fisico do disco onde estao aqueles registos. Mas como nao tenho acesso fisico ao servidor....

    Se fizer select * into #tmp..... e depois select campo1 from #tmp .....já funca.....

    Estou mesmo a ficar sem ideias. Começo a achar que há bruxas :)
     
  6. RADguy

    RADguy Power Member

    Pelo que vi no teu último post estas a usar tabelas temporarias.
    Pode ter a ver com isso?
     
  7. [C4]

    [C4] Power Member

    Estou a usar temporarias para colocar o conteudo com o select * pra depois poder fazer o select campo1
    A tabela1 é mesmo uma tabela fisica e o problema é mesmo no select à tabela fisica.
     
  8. Viva.
    A tabela tem chave?
    Se não tem, há registos repetidos?
    Hélio
     
  9. [C4]

    [C4] Power Member

    Não estou a perceber a logica das chaves, nem a ver em que medida retornaria resultados diferente:
    select * from tabela1 where campo1='B' retorna dados
    select campo1 from tabela1 where campo1='B' nao retorna dados

    Mas sim, tem chave e nao nao ha registos repetidos.
     
  10. reise

    reise Power Member

    Atenção que podes ter o indice marado e não retornar dados. Por isso é que quando metes o * retorna dados porque o indice não deve ser usado.
    Se tiveres indices apaga-os e volta a testar as queries. Já me aconteceu uma coisa parecida numa bd oracle.
     

Partilhar esta Página