Tive um probleminha com uma tabela no banco de dados (SQLServer 2000) onde trabalho, que estava sem chave primária (não fui eu quem criei), e após algumas importações e exportações muitos registros ficaram duplicados. Foi necessário então criar uma query para remover as entradas duplicadas, sendo que algumas estavam com 5 registros duplicados, outras com 4, outras com 3, assim sucessivamente...
Então, para cada quantidade de registros duplicados é necessário ajustar o valor do count conforme descrito abaixo:
--- a) Cria tabela temporária
CREATE TABLE #tb_temp
(cid_cod int,
cid_nome varchar(50),
uf char(2),
data datetime
)
--- Observação geral: *atualizar o valor do count p/ qtdade de registros duplicados que você deseja consultar.
--- b) Consulta registros duplicados [*atualizar count]
SELECT cid_cod, cid_nome FROM tb_cidades WHERE cid_cod IS NOT NULL GROUP BY cid_cod, cid_nome HAVING Count(*)=2
--- c) Insere 1 registro do campo repetido na tabela temporária [*atualizar count]
INSERT INTO #tb_temp
SELECT cid_cod, cid_nome, uf, data
FROM [tb_cidades] As Tmp GROUP BY cid_cod, cid_nome, uf, data HAVING Count(*)=2
--- d) Deleta todos os registros do campo repetido na tabela original [*atualizar count]
DELETE FROM tb_cidades
WHERE cid_cod IN
(SELECT cid_cod FROM tb_cidades WHERE cid_cod IS NOT NULL GROUP BY cid_cod HAVING Count(*)=2)
--- e) Insere 1 registro da temporária na tabela original
INSERT INTO tb_cidades SELECT * FROM #tb_temp
--- f) Consulta o registro pelo nome (verifica se a duplicidade foi corrigida) [*atualizar o cid_nome]
SELECT * FROM tb_cidades WHERE cid_nome like 'BELEM'
--- g) Deleta tabela temporária
DROP TABLE #tb_temp
Uma observação importante é:
- Não tente fazer JOIN (INNER, LEFT, RIGHT etc) utilizando tabela temporária, não vai funcionar. Se realmente precisar fazer isso crie uma View talvez isso resolva seu problema.
quarta-feira, janeiro 23, 2008
terça-feira, janeiro 15, 2008
UDF Coldfusion para converter quebra de linha
Hoje eu tive que desenvolver uma UDF em Coldfusion para resolver esse pequeno problema. A UDF por sua vez faz o seguinte converte o código ASC que representa quebra de linha para o formato de exibição em HTML, no caso <br />.
<cffunction name="converteQuebraDeLinha" returntype="string"
output="false" hint="Converte código ASC de quebra de linha
para <br />">
<cfargument name="s_texto" type="string">
<cfscript>
result = reReplace(arguments.s_texto, chr(13) & chr(10), "<br/>", "ALL");
result = reReplace(result, chr(13), "<br />","ALL");
result = reReplace(result, chr(10), "<br />","ALL");
</cfscript>
<cfreturn result>
</cffunction>
<cffunction name="converteQuebraDeLinha" returntype="string"
output="false" hint="Converte código ASC de quebra de linha
para <br />">
<cfargument name="s_texto" type="string">
<cfscript>
result = reReplace(arguments.s_texto, chr(13) & chr(10), "<br/>", "ALL");
result = reReplace(result, chr(13), "<br />","ALL");
result = reReplace(result, chr(10), "<br />","ALL");
</cfscript>
<cfreturn result>
</cffunction>
Assinar:
Comentários (Atom)