sql >> Base de Datos >  >> RDS >> Sqlserver

Cambiar el nombre de una restricción CHECK en SQL Server usando T-SQL

Puede usar el sp_rename procedimiento almacenado del sistema para cambiar el nombre de un CHECK restricción en SQL Server.

El propósito de este procedimiento almacenado es permitirle cambiar el nombre de los objetos creados por el usuario en la base de datos actual. Por lo tanto, también puede usarlo para cambiar el nombre de otros objetos, como tablas, columnas, tipos de datos de alias, etc.

Sintaxis

La sintaxis de sp_rename va así:

sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name'   
    [ , [ @objtype = ] 'object_type' ]

Entonces su código podría ser algo como esto:

sp_rename 'schema_name.old_constraint_name', 'new_constraint_name';

Tenga en cuenta que la documentación de Microsoft establece que al cambiar el nombre de las restricciones, debe calificar el nombre existente con el nombre del esquema.

El siguiente ejemplo muestra cómo cambiar el nombre de un CHECK restricción.

Ejemplo 1:elegir una restricción para cambiar el nombre

Primero, enumeremos el CHECK restricciones en la base de datos, para que podamos decidir cuál cambiar el nombre.

SELECT 
  name,
  SCHEMA_NAME(schema_id) AS 'Schema',
  OBJECT_NAME(parent_object_id) AS 'Table',
  definition
FROM sys.check_constraints;

Resultado:

+-----------------+----------+----------------+----------------------------------------+
| name            | Schema   | Table          | definition                             |
|-----------------+----------+----------------+----------------------------------------|
| chkPrice        | dbo      | ConstraintTest | ([Price]>(0))                          |
| chkValidEndDate | dbo      | ConstraintTest | ([EndDate]>=[StartDate])               |
| chkTeamSize     | dbo      | ConstraintTest | ([TeamSize]>=(5) AND [TeamSize]<=(20)) |
| chkJobTitle     | dbo      | Occupation     | ([JobTitle]<>'Digital Nomad')          |
+-----------------+----------+----------------+----------------------------------------+

Cambiemos el nombre de la segunda restricción ( chkValidEndDate ).

Eliminemos el Válido parte para que se convierta simplemente en chkEndDate .

Ejemplo 2:cambiar el nombre de la restricción

Ejecute esto para cambiar el nombre de la restricción.

sp_rename 'dbo.chkValidEndDate', 'chkEndDate';

Entonces, el nombre antiguo (existente) viene primero, seguido del nuevo nombre.

Así que ahora si selecciono todo CHECK restricciones de nuevo, obtengo el siguiente resultado.

SELECT 
  name,
  SCHEMA_NAME(schema_id) AS 'Schema',
  OBJECT_NAME(parent_object_id) AS 'Table',
  definition
FROM sys.check_constraints;

Resultado:

+-------------+----------+----------------+----------------------------------------+
| name        | Schema   | Table          | definition                             |
|-------------+----------+----------------+----------------------------------------|
| chkPrice    | dbo      | ConstraintTest | ([Price]>(0))                          |
| chkEndDate  | dbo      | ConstraintTest | ([EndDate]>=[StartDate])               |
| chkTeamSize | dbo      | ConstraintTest | ([TeamSize]>=(5) AND [TeamSize]<=(20)) |
| chkJobTitle | dbo      | Occupation     | ([JobTitle]<>'Digital Nomad')          |
+-------------+----------+----------------+----------------------------------------+

Se ha cambiado el nombre de la restricción.

Como se mencionó, el sp_rename El procedimiento almacenado no se limita solo a CHECK restricciones Puede usar exactamente la misma sintaxis para cambiar el nombre de una restricción de clave externa, una tabla, una columna, un tipo de datos de alias o cualquier otro objeto definido por el usuario.

Sin embargo, Microsoft recomienda no cambiar el nombre de los procedimientos almacenados, los desencadenadores, las funciones definidas por el usuario o las vistas. En tales casos, Microsoft le recomienda que suelte el objeto y lo vuelva a crear con el nuevo nombre.