Fórum Alterar meus campos chaves #440782
24/04/2013
0
Meu banco de dados esta com estrutura campo chave como string. quero alterar todos de uma so vez para inteiro teria como?
usando firebird 2.5
usando firebird 2.5
Fistsoft-sistemas Empresarial-ltda;
Curtir tópico
+ 0
Responder
Posts
01/05/2013
Alvaro Vieira
Teria que fazer uma procedure que seria bem complexa, pois teria que ser excluída a chave promária, trocar o tipo do campo e recriar a chave promária. Se fossem só esses os problemas, seria somente uma questão de tempo, mas como a chave é string, como garantir que ao alterar o tipo do campo não haverá uma letra no meio gerando um erro ? Além dos problemas que podem surgir com as ligações das outras tabelas à essa chave.
Para simplificar, sugiro que você faça manualmente, tabela por tabela com calma e verificando os erros.
Caso seja necessário criar uma coluna indexada para comparação ou outra utilidade, veja que elegante a solução que encontrei no link http://stackoverflow.com/questions/9078730/adding-a-unique-column-to-existing-sql-database
O mais bacana é que pode ser rodada diretamente no IBExpert (verificar a versão do Firebird se aceita a intrução Execute Block, do contrário, basta criar uma Procedure).
Abraço.
Para simplificar, sugiro que você faça manualmente, tabela por tabela com calma e verificando os erros.
Caso seja necessário criar uma coluna indexada para comparação ou outra utilidade, veja que elegante a solução que encontrei no link http://stackoverflow.com/questions/9078730/adding-a-unique-column-to-existing-sql-database
O mais bacana é que pode ser rodada diretamente no IBExpert (verificar a versão do Firebird se aceita a intrução Execute Block, do contrário, basta criar uma Procedure).
Abraço.
EXECUTE BLOCK
AS
DECLARE VARIABLE DBKEY CHAR(8);
DECLARE VARIABLE C INTEGER = 1;
BEGIN
FOR
SELECT
RDB$DB_KEY
FROM
your_table_name
INTO
:dbkey
DO BEGIN
UPDATE your_table_name SET id = :c WHERE rdb$db_key = :dbkey;
c = :c + 1;
END
END
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)