[Firebird] - delete first 1? Tem como fazer algo assim?
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
Curtidas 0
Respostas
Marcosrocha
11/11/2008
Dois registros exatamente idênticos?
GOSTEI 0
Adminfo
11/11/2008
Dois registros exatamente idênticos?
Sim
GOSTEI 0
Marcosrocha
11/11/2008
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.
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.
GOSTEI 0
Diegotiemann
11/11/2008
Tente o seguinte:
delete from tabela where id_primario in (select first 1 from tabela .....)
GOSTEI 0
Adminfo
11/11/2008
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.
GOSTEI 0
Upgradesource
11/11/2008
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
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
GOSTEI 0
Upgradesource
11/11/2008
coloquei errado
no lugar de
select distinct(id_primario) from cliente
coloque
select distinct * from cliente
no lugar de
select distinct(id_primario) from cliente
coloque
select distinct * from cliente
GOSTEI 0
Marcosrocha
11/11/2008
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:
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:
GOSTEI 0