GARANTIR DESCONTO

Fórum [Firebird] - delete first 1? Tem como fazer algo assim? #366040

11/11/2008

0

Exemplo: Tenho 2 registros com mesmo código. Quero excluir apenas um deles. Tem como fazer algo parecido com [b:dcd87d63a6]delete first 1 from TABELA[/b:dcd87d63a6]?


Adminfo

Adminfo

Responder

Posts

11/11/2008

Marcosrocha

Dois registros exatamente idênticos?


Responder

Gostei + 0

11/11/2008

Adminfo

Dois registros exatamente idênticos?


Sim


Responder

Gostei + 0

11/11/2008

Marcosrocha

Bom, suponho que se você conseguiu ter 2 registros idênticos com o mesmo código é que não está utilizando chave primária ou teve o banco corrompido.
Sua única saída é deletar manualmente via IBExpert, IBOConsole ou qualquer outro manipulador de dados do Firebird.

Se entender um pouco de Stored Procedures pode fazer dentro dela com que delete apenas o primeiro. Aqui no fórum tem bastante coisa sobre o assunto.


Responder

Gostei + 0

11/11/2008

Diegotiemann

Tente o seguinte:
delete from tabela where id_primario in (select first 1 from tabela .....)



Responder

Gostei + 0

12/11/2008

Adminfo

Bom, suponho que se você conseguiu ter 2 registros idênticos com o mesmo código é que não está utilizando chave primária ou teve o banco corrompido. Sua única saída é deletar manualmente via IBExpert, IBOConsole ou qualquer outro manipulador de dados do Firebird. Se entender um pouco de Stored Procedures pode fazer dentro dela com que delete apenas o primeiro. Aqui no fórum tem bastante coisa sobre o assunto.


Realmente é uma base corrompida. Já tentei excluir ´na unha´ via IBExpert, mas não foi possível, ele não deixa. Não tentei com o IBOConsole.




Tente o seguinte: Código: [quote:bc9e23e315]delete from tabela where id_primario in (select first 1 from tabela .....)
[/quote:bc9e23e315]

Todas as colunas são iguais, inclusive a ´id_primario´, portanto não poderei fazer como você sugeriu.



E como é uma quantidade considerável de registros, queria fazer quem sabe uma SP para apenas roda-la no cliente, mas eu precisaria excluir via código apenas um registro de dois duplicados.


Responder

Gostei + 0

12/11/2008

Upgradesource

Cara o negocio da tabela corrompida é triste mesmo,

o que vc pode fazer e extrair a metadata da sua tabela, criar uma nova
ex:
cliente - clientetmp

faz um

select distinct(id_primario) from cliente

e joga para a tabela clientetmp

para vc fazer esse select crie uma storedprocedure dando um for, com isso vc vai ter os dados sem duplicidade, depois disso dah um

delete from cliente

e depois faz a procedure jogar os dados da tabela clientetmp para cliente

essa é uma alternativa para resolver seu problema.

[ ]´s


Responder

Gostei + 0

12/11/2008

Upgradesource

coloquei errado

no lugar de

select distinct(id_primario) from cliente

coloque

select distinct * from cliente


Responder

Gostei + 0

12/11/2008

Marcosrocha

Para corrigir o banco de dados faça um ´gfix -validate´, faça um gbak e depois restaure.
Faça a extração dos dados como o [b:24ffba7de6]upgradesource[/b:24ffba7de6] sugere e remova o dado duplicado.
Eu faria isso em um momento que pudesse parar o sistema. Logo, teria liberdade para extrair os dados para um arquivo, removendo do script o dado duplicado (se ele ainda estiver la depois do gfix e gbak), remover todos os dados da tabela corrompida e reinserir executando o script contendo os dados.
Depois do serviço pronto colocaria o sistema no ar de novo e pronto :wink:


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar