Alterar meus campos chaves
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;
Curtidas 0
Respostas
Alvaro Vieira
24/04/2013
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
GOSTEI 0