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

Respuestas:


77

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

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


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


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'

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'

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'

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
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.