¿Cambiar el nombre de una restricción en SQL Server?

83

¿Es posible cambiar el nombre de una restricción en SQL Server? No quiero tener que eliminar y crear una nueva porque esta restricción afecta a otras restricciones ya existentes y tendré que volver a crearlas / modificarlas.

mezamórfico
fuente

Respuestas:

77

Puede cambiar el nombre usando sp_rename usando@objtype = 'OBJECT'

Esto funciona en objetos listados en sys.objects que incluye restricciones

gbn
fuente
14
En caso de que no pueda hacer que esto funcione, dice en MSDN: "Al cambiar el nombre de una restricción, se debe especificar el esquema al que pertenece la restricción".
Black Light
1
Para las restricciones de PK, no es necesario @objtype = 'OBJECT'especificarlo. Simplemente especifique el nombre antiguo y el nuevo.
pkuderov
77

Después de investigar un poco más, descubrí que en realidad tiene que estar en esta forma:

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

Fuente

ozz
fuente
7
Ésta es la respuesta más precisa. Los otros formularios solo funcionan porque la mayoría de las personas vuelcan todas sus tablas en el esquema predeterminado (generalmente "dbo :) y puede omitir el esquema predeterminado. Pero si usa varios esquemas, esto es correcto (y siempre puede indicar" dbo " ).
Godeke
De la fuente, no parece que necesite la referencia N'OBJECT '
Abrham Smith
52

Puede usar sp_rename .

sp_rename 'CK_Ax', 'CK_Ax1'
Mikael Eriksson
fuente
2
+1 Esto es lo que utiliza SSMS al cambiar el nombre de las restricciones. Para una restricción PK, pasa INDEXcomo tipo de objeto.
Martin Smith
3
También es importante tener en cuenta que las restricciones CHECK, a diferencia de las PK, no requieren un prefijo de tabla en el primer sp_renameparámetro y fallarán si usa uno.
mattmc3
8

la respuesta es verdadera:

exec sp_rename 
@objname = 'Old_Constraint',
@newname = 'New_Constraint',
@objtype = 'object'
rojib
fuente
4

Sé que esta es una pregunta antigua, pero encontré que lo siguiente es muy útil, además de las otras excelentes respuestas:

Si la restricción que se va a renombrar tiene un punto (punto), entonces debe encerrarla entre corchetes, así:

sp_rename 'schema.[Name.With.Period.In.It]', 'New.Name.With.Period.In.It'
Guiños
fuente
1
Y también: no ponga los corchetes en el nuevo nombre. De lo contrario, podría terminar con un nombre que contenga corchetes
casenonsensitive