¿Cómo puedo modificar una restricción de clave primaria usando la sintaxis SQL?


100

Tengo una tabla a la que le falta una columna en su restricción de clave principal. En lugar de editarlo a través de SQL Server, quiero poner esto en un script para agregarlo como parte de nuestros scripts de actualización.

¿Qué sintaxis puedo usar para hacer esto? ¿Debo eliminar y volver a crear la restricción de clave?


5
AFAIK, sí, debe eliminar y volver a crear la restricción PK. No recuerdo ningún comando para agregar una columna a una restricción PK / FK ya existente.
Seramme

Respuestas:


149

Si. La única forma sería eliminar la restricción con una tabla Alter y luego volver a crearla.

ALTER TABLE <Table_Name>
DROP CONSTRAINT <constraint_name>

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

11
Si no conoce el nombre de la restricción de clave principal, utilice la consulta que se encuentra aquí para buscarla (o busque y suelte todas a la vez). http://stackoverflow.com/a/13948609/945875
Justin

si no estaba claro, o si alguien más comete el mismo error, el nombre de la restricción no puede ir entre comillas alter table PatientsInfo drop constraint PK__Patients__1CBB51380A338187funciona aquí
Maslow

1
Para aquellos de ustedes que no conocen el nombre de la restricción: ALTER TABLE db. table SOLTAR LLAVE PRIMARIA, AÑADIR LLAVE PRIMARIA ( id1, id2);
karsten314159

21

PRIMARY KEY CONSTRAINTno se puede modificar, solo puede soltarlo y crear de nuevo. En el caso de grandes conjuntos de datos, puede provocar un tiempo de ejecución prolongado y, por lo tanto, la falta de disponibilidad de tablas.


3

En cuanto al rendimiento, no tiene sentido mantener índices no agrupados durante este proceso, ya que se volverán a actualizar al soltarlos y crearlos. Si se trata de un conjunto de big data, debería considerar cambiar el nombre de la tabla (si es posible, ¿alguna configuración de seguridad en ella?), Volver a crear una tabla vacía con las claves correctas y migrar todos los datos allí. Debes asegurarte de tener suficiente espacio para esto.


3

En mi caso, quiero agregar una columna a una clave principal (columna 4). Usé este script para agregar 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

puede cambiar el nombre de los objetos de restricción usando sp_rename (como se describe en esta respuesta )

por ejemplo:

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

3
La pregunta era cómo cambiar la restricción, es decir, AGREGAR una columna, no cómo cambiar el nombre.
Andrew Steitz
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.