¿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?

Jason
fuente
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>)
darnir
fuente
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.

Oleg Dok
fuente
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.

Oky
fuente
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
)
MNF
fuente
-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'
Garrett Taiji
fuente
3
La pregunta era cómo cambiar la restricción, es decir, AGREGAR una columna, no cómo cambiar el nombre.
Andrew Steitz