Alterar meus campos chaves

Firebird

24/04/2013

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
Fistsoft-sistemas Empresarial-ltda;

Fistsoft-sistemas Empresarial-ltda;

Curtidas 0

Respostas

Alvaro Vieira

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.

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
POSTAR