O fantasma do SQL

[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???
 
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.
 
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 :)
 
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.
 
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.
 
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.
 
Back
Topo