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.