Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Rinominare un vincolo CHECK in SQL Server utilizzando T-SQL

Puoi usare sp_rename stored procedure di sistema per rinominare un CHECK vincolo in SQL Server.

Lo scopo di questa procedura memorizzata è consentire di rinominare gli oggetti creati dall'utente nel database corrente. Quindi puoi anche usarlo per rinominare altri oggetti come tabelle, colonne, tipi di dati alias, ecc.

Sintassi

La sintassi di sp_rename va così:

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

Quindi il tuo codice potrebbe essere qualcosa del genere:

sp_rename 'schema_name.old_constraint_name', 'new_constraint_name';

Si noti che la documentazione Microsoft afferma che quando si rinominano i vincoli è necessario qualificare il nome esistente con il nome dello schema.

L'esempio seguente mostra come rinominare un CHECK vincolo.

Esempio 1:scegli un vincolo da rinominare

Per prima cosa, elenchiamo il CHECK vincoli nel database, così possiamo decidere quale rinominare.

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

Risultato:

+-----------------+----------+----------------+----------------------------------------+
| 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')          |
+-----------------+----------+----------------+----------------------------------------+

Rinominiamo il secondo vincolo ( chkValidEndDate ).

Rimuoviamo il Valido parte in modo che diventi solo chkEndDate .

Esempio 2:rinominare il vincolo

Esegui questo per rinominare il vincolo.

sp_rename 'dbo.chkValidEndDate', 'chkEndDate';

Quindi il vecchio nome (esistente) viene prima, seguito dal nuovo nome.

Quindi ora seleziono tutti i CHECK vincoli di nuovo, ottengo il seguente risultato.

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

Risultato:

+-------------+----------+----------------+----------------------------------------+
| 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')          |
+-------------+----------+----------------+----------------------------------------+

Il nome del vincolo è stato modificato.

Come accennato, il sp_rename stored procedure non si limita al solo CHECK vincoli. Puoi utilizzare esattamente la stessa sintassi per rinominare un vincolo di chiave esterna, una tabella, una colonna, un tipo di dati alias o qualsiasi altro oggetto definito dall'utente.

Tuttavia, Microsoft sconsiglia di rinominare stored procedure, trigger, funzioni definite dall'utente o visualizzazioni. In questi casi, Microsoft consiglia invece di eliminare l'oggetto e di ricrearlo con il nuovo nome.