Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

publicitando

Select para validar sequência ...

Recommended Posts

Pessoal, estou precisando montar uma query para validar se a sequência numérica de registros está correta no banco.

 

Exemplo: Tabela XPTO

 

Seq

1

2

3

4

7

 

Neste caso, a sequência foi quebrada ... pulou do 4 para o 7 ...

 

Eu preciso montar uma query para encontrar essa quebra de sequência e não estou conseguindo.

 

Alguém da uma luz?

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

qual a necessidade disso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Precisei de uma coisa assim essa semana. Me ajudaram a fazer também..... :)

Não usei, achei outra forma para fazer que eu queria pela aplicação.

 

Tenta assim

 select a.id -1 from tabela a.id <> 1 and not exists (select id from tabela b where b.id = (a.id-1) )

 

Já vou avisar que vai ficar lento se sua tabela tiver um bocado de registros.

 

 

Diga-nos o que quer fazer, pode ser que tenha outra solução.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, eu preciso disso porque o pessoal da área de negócio me relatou a ausência de alguns documentos fiscais no sistema referente a certos distribuidores.

 

Como realmente encontrei um problema no sistema, queria verificar no banco se não ocorreu esse problema com os demais.

 

Documento fiscal precisa seguir uma numeração sequencial. Se eu varrer o banco e encontrar a perda da sequência, por exemplo, do 514 ir para o 516 eu vou saber quais documentos estão faltando.

 

O problema é que não sou dba nem nada do gênero, mas largaram a bomba na minha mão rs ...

 

Scorpio ... tentei adaptar essa sua query mas não funcionou ...

 

A coluna que preciso conferir a numeração é a "nr_formulario_ctrc" da tabela "TB_FORMULARIO_CTRC".

 

O que eu preciso fazer para a query fazer a comparação nesta coluna?

 

 

Precisei de uma coisa assim essa semana. Me ajudaram a fazer também..... :)

Não usei, achei outra forma para fazer que eu queria pela aplicação.

 

Tenta assim

 select a.id -1 from tabela a.id <> 1 and not exists (select id from tabela b where b.id = (a.id-1) )

 

Já vou avisar que vai ficar lento se sua tabela tiver um bocado de registros.

 

 

Diga-nos o que quer fazer, pode ser que tenha outra solução.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

publicitando

 

Na verdade você precisa saber quais documentos fiscais foram excluídos do sistema. Só pra gente entender melhor:

 

1. Essa sequencia númerica é auto-incremental ou o sistema gera?

2. Não existe uma relação entre documento fiscal e distribuidor?

3. Já procurou saber se existe um log dos documentos excluídos?

 

Estou perguntando porque você está entendendo que um documento fiscal foi excluído com base na sequencia númerica da tabela. Isso é um pouco perigoso se for auto-incremental, pois o fato de existir um "buraco" na sequencia do id, não quer dizer q esse documento existiu um dia.

 

Se realmente for auto-incremento, o SQL pode pular a numeração em caso de falhas. Por exemplo, um insert que não foi bem sucedido faz com que a sequencia numérica seja adiantada em 1 posição mesmo que o registro não tenha sido gravado. Logo o próximo registro vai receber um novo sequencial e aquele id não vai existir gerando um buraco na sequencia. Deu para entender?

 

[]'s

 

Fernando Silveira

Compartilhar este post


Link para o post
Compartilhar em outros sites

Testei aqui e a query funcionou(ainda não tinha testado).

Criei uma tabela Table_1 e um campo do tipo int com nome num.

Funcionou.

select a.num -1 from table_1 a
where a.num <> 1 and not exists (
select b.num from table_1 b where b.num = (a.num-1)
)

O seu campo é numérico?

 

 

 

Tá, mas como você vai executar uma vez só a performance que vá pra casa do chapéu :) ... zueira hein hauahuahuahauhu

declare @max int, @curr int
select @max = max(num) from Original
set @curr = 0
while @curr < @max
begin
set @curr = @curr + 1
if(not EXISTS(select num from Original where num = @curr))
begin
	print 'Código ' + cast(@curr as char(3)) + ' não encontrado.'
end
end

Na tabela tinha dados de 1 a 255, me trouxe

Código 7 Não encontrado

Código 10 Não encontrado

Código 23 Não encontrado

Código 36 Não encontrado

Código 45 Não encontrado

Código 68 Não encontrado

Código 69 Não encontrado

Código 89 Não encontrado

Código 123 Não encontrado

Código 155 Não encontrado

Código 165 Não encontrado

Código 178 Não encontrado

Código 201...254 Não encontrado

Procure responder as perguntas do Fernando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.