Como posso alterar uma restrição de chave primária usando a sintaxe SQL?


100

Eu tenho uma tabela que está faltando uma coluna em sua restrição de chave primária. Em vez de editá-lo por meio do SQL Server, quero colocá-lo em um script para adicioná-lo como parte de nossos scripts de atualização.

Que sintaxe posso usar para fazer isso? Devo descartar e recriar a restrição de chave?


5
AFAIK sim, você precisa descartar e recriar a restrição PK. Não me lembro de nenhum comando para adicionar uma coluna a uma restrição PK / FK já existente.
Seramme

Respostas:


149

Sim. A única maneira seria eliminar a restrição com uma tabela Alter e recriá-la.

ALTER TABLE <Table_Name>
DROP CONSTRAINT <constraint_name>

ALTER TABLE <Table_Name>
ADD CONSTRAINT <constraint_name> PRIMARY KEY (<Column1>,<Column2>)

11
Se você não souber o nome da restrição de chave primária, use a consulta encontrada aqui para procurá-la (ou procure e elimine tudo de uma vez). http://stackoverflow.com/a/13948609/945875
Justin

se não estiver claro ou se alguém cometer o mesmo erro, o nome da restrição não pode ser colocado entre aspas alter table PatientsInfo drop constraint PK__Patients__1CBB51380A338187está funcionando aqui
Maslow

1
Para aqueles que não sabem o nome da restrição: ALTER TABLE db. table DROP PRIMARY KEY, ADD PRIMARY KEY ( id1, id2);
karsten314159

21

PRIMARY KEY CONSTRAINTnão pode ser alterado, você só pode abandoná-lo e criar novamente. Para grandes conjuntos de dados, pode causar um longo tempo de execução e, portanto, indisponibilidade da tabela.


3

Em termos de desempenho, não há motivo para manter índices não agrupados durante isso, pois eles serão atualizados novamente ao serem descartados e criados. Se for um conjunto de big data, você deve considerar renomear a tabela (se possível, alguma configuração de segurança nela?), Recriar uma tabela vazia com as chaves corretas para migrar todos os dados para lá. Você deve ter certeza de que tem espaço suficiente para isso.


3

No meu caso, quero adicionar uma coluna a uma chave primária (coluna4). Usei este script para adicionar column4

ALTER TABLE TableA
DROP CONSTRAINT [PK_TableA]

ALTER TABLE TableA
ADD CONSTRAINT [PK_TableA] PRIMARY KEY (
    [column1] ASC,
    [column2] ASC, 
    [column3] ASC,
    [column4] ASC
)

-4

você pode renomear objetos de restrição usando sp_rename (conforme descrito nesta resposta )

por exemplo:

EXEC sp_rename N'schema.MyIOldConstraint', N'MyNewConstraint'

3
A questão era como alterar a restrição, ou seja, ADICIONAR uma coluna, não como renomear.
Andrew Steitz
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.