sql >> Databasteknik >  >> RDS >> Sqlserver

Byt namn på en CHECK-begränsning i SQL Server med T-SQL

Du kan använda sp_rename systemlagrad procedur för att byta namn på en CHECK begränsning i SQL Server.

Syftet med denna lagrade procedur är att låta dig byta namn på användarskapade objekt i den aktuella databasen. Så du kan också använda den för att byta namn på andra objekt som tabeller, kolumner, aliasdatatyper etc.

Syntax

Syntaxen för sp_rename går så här:

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

Så din kod kan se ut ungefär så här:

sp_rename 'schema_name.old_constraint_name', 'new_constraint_name';

Observera att Microsofts dokumentation anger att när du byter namn på begränsningar måste du kvalificera det befintliga namnet med schemanamnet.

Följande exempel visar hur man byter namn på en CHECK begränsning.

Exempel 1 – Välj en begränsning att byta namn på

Låt oss först lista ut CHECK begränsningar i databasen, så att vi kan bestämma vilken som ska döpas om.

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

Resultat:

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

Låt oss byta namn på den andra begränsningen ( chkValidEndDate ).

Låt oss ta bort Giltigt del så att det bara blir chkEndDate .

Exempel 2 – Byt namn på begränsningen

Kör detta för att byta namn på begränsningen.

sp_rename 'dbo.chkValidEndDate', 'chkEndDate';

Så det gamla (befintliga) namnet kommer först, följt av det nya namnet.

Så nu om jag väljer alla CHECK begränsningar igen får jag följande resultat.

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

Resultat:

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

Begränsningens namn har ändrats.

Som nämnts, sp_rename lagrad procedur är inte begränsad till bara CHECK begränsningar. Du kan använda exakt samma syntax för att byta namn på en främmande nyckelbegränsning, en tabell, kolumn, aliasdatatyp eller något annat användardefinierat objekt.

Microsoft rekommenderar dock att man inte byter namn på lagrade procedurer, utlösare, användardefinierade funktioner eller vyer. I sådana fall rekommenderar Microsoft att du istället släpper objektet och återskapar det med det nya namnet.


  1. Kan inte hitta vare sig kolumn dbo eller den användardefinierade funktionen eller aggregerad dbo.Splitfn, eller så är namnet tvetydigt

  2. Hur man deklarerar och visar en variabel i Oracle

  3. En snabb titt på SQL Servers numeriska funktioner

  4. Komma igång med Shareplex på Windows på AWS, del 2