Alterar tamanho campo de Primary Key ( composta )

Firebird

17/09/2004

Ola pessoal,

Como faço para alterar o tamanho do campo EMPRESA, de 4 para 6,
via SQL, sem perder os dados já existentes, sendo:


EMPRESA - VARCHAR(4) NOT NULL ( primary key)
REGIAO - VARCHAR(10) NOT NULL ( primary key)
GERENTE VARCHAR(40)
TELEFONE VARCHAR(14)
CIDADE VARCHAR(30)

Desde já agradeço,
Geraldo


Jose Oliveira

Jose Oliveira

Curtidas 0

Respostas

Fsflorencio

Fsflorencio

17/09/2004

Vc deve antes dropar a constraint que define a chave primária, senão vc não consegue alterar o tipo do campo.

Além da constraint este campo não pode ter nenhuma dependência como stored procedures, triggers ou views. Caso tenha, vc deve dropar e depois criar novamente estas dependências.

alterando o tipo de campo por SQL não há perda de nenhuma informação.

Se vc tentar alterar para um tamanho menor isto não é possível, sendo necessária a criação de um campo novo do tipo correto transferindo para sí os registros do campo a ser alterado e depois renomeando este campo depois de dropar o campo velho.

blz!


GOSTEI 0
Martins

Martins

17/09/2004

fsflorencio
Vc deve antes dropar a constraint que define a chave primária, senão vc não consegue alterar o tipo do campo. Além da constraint este campo não pode ter nenhuma dependência como stored procedures, triggers ou views. Caso tenha, vc deve dropar e depois criar novamente estas dependências. alterando o tipo de campo por SQL não há perda de nenhuma informação. Se vc tentar alterar para um tamanho menor isto não é possível, sendo necessária a criação de um campo novo do tipo correto transferindo para sí os registros do campo a ser alterado e depois renomeando este campo depois de dropar o campo velho.

Só aproveitando o q o colega falou, seria interessante vc fazer um estudo sobre o uso de dominios, se bem q ainda assim vc teria q dorpar as dependências e indices, mas não perderia seus dados.

PS: Seria interessante vc utilizar o IB-Expert, acho q fica mais fácil do q o IBConsole.

T[+]...


GOSTEI 0
Gandalf.nho

Gandalf.nho

17/09/2004

Outra possibilidade, se for muito complicado dropar constraints, procedures, triggers e outros, é criar uma cópia em branco da base já com as modificações necessárias no script e depois copiar os dados da base velha pra nova através de um programa como o IBDataPump [url]http://www.clevercomponents.com [/url]


GOSTEI 0
Jose Oliveira

Jose Oliveira

17/09/2004

A tabela não possui <Referential Constraints>, possuindo apenas
primary Key.

Desta forma não tem como dropar a constraint que define a chave primária.

Qual a solução nesse caso.

Obrigado, Geraldo.


GOSTEI 0
Afarias

Afarias

17/09/2004

|A tabela não possui , possuindo apenas
|primary Key.


sequência::

alter table nome_da_tabela drop constraint nome_da_primary_key;

alter table nome_da_tabela alter empresa type varchar(6);

alter table nome_da_tabela add constraint nome_da_nova_primary_key
primary key (empresa, regiao);



T+


GOSTEI 0
Martins

Martins

17/09/2004

alter table nome_da_tabela drop constraint nome_da_primary_key; alter table nome_da_tabela alter empresa type varchar(6); alter table nome_da_tabela add constraint nome_da_nova_primary_key primary key (empresa, regiao);


Show de bola... uma questão de analise lógica da situação, ainda bem q podemos contar com companheiros dedicados a ajudar o próximo.


GOSTEI 0
POSTAR