Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Renomeie uma restrição CHECK no SQL Server usando T-SQL


Você pode usar o sp_rename procedimento armazenado do sistema para renomear um CHECK restrição no SQL Server.

A finalidade desse procedimento armazenado é permitir que você renomeie objetos criados pelo usuário no banco de dados atual. Portanto, você também pode usá-lo para renomear outros objetos, como tabelas, colunas, tipos de dados de alias, etc.


Sintaxe


A sintaxe de sp_rename fica assim:
sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name'   
    [ , [ @objtype = ] 'object_type' ]

Então seu código poderia ficar assim:
sp_rename 'schema_name.old_constraint_name', 'new_constraint_name';

Observe que a documentação da Microsoft afirma que, ao renomear restrições, você deve qualificar o nome existente com o nome do esquema.

O exemplo a seguir demonstra como renomear um CHECK limitação.

Exemplo 1 – Escolha uma restrição para renomear


Primeiro, vamos listar o CHECK restrições no banco de dados, para que possamos decidir qual renomear.
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')          |
+-----------------+----------+----------------+----------------------------------------+

Vamos renomear a segunda restrição ( chkValidEndDate ).

Vamos remover o Válido parte para que se torne apenas chkEndDate .

Exemplo 2 – Renomear a restrição


Execute isso para renomear a restrição.
sp_rename 'dbo.chkValidEndDate', 'chkEndDate';

Portanto, o nome antigo (existente) vem primeiro, seguido pelo novo nome.

Então agora se eu selecionar todos os CHECK restrições novamente, recebo o seguinte 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')          |
+-------------+----------+----------------+----------------------------------------+

O nome da restrição foi alterado.

Como mencionado, o sp_rename procedimento armazenado não se limita apenas a CHECK restrições. Você pode usar exatamente a mesma sintaxe para renomear uma restrição de chave estrangeira, uma tabela, coluna, tipo de dados de alias ou qualquer outro objeto definido pelo usuário.

No entanto, a Microsoft não recomenda renomear procedimentos armazenados, gatilhos, funções definidas pelo usuário ou exibições. Nesses casos, a Microsoft recomenda que você descarte o objeto e o recrie com o novo nome.