Можете да използвате sp_rename
системна съхранена процедура за преименуване на CHECK
ограничение в SQL Server.
Целта на тази съхранена процедура е да ви позволи да преименувате създадени от потребителя обекти в текущата база данни. Така че можете да го използвате и за преименуване на други обекти като таблици, колони, типове данни с псевдоним и т.н.
Синтаксис
Синтаксисът на sp_rename
става така:
sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name' [ , [ @objtype = ] 'object_type' ]
Така че кодът ви може да е нещо подобно:
sp_rename 'schema_name.old_constraint_name', 'new_constraint_name';
Имайте предвид, че в документацията на Microsoft се посочва, че когато преименувате ограничения, трябва да квалифицирате съществуващото име с името на схемата.
Следващият пример демонстрира как да преименувате CHECK
ограничение.
Пример 1 – Изберете ограничение за преименуване
Първо, нека изброим CHECK
ограничения в базата данни, за да можем да решим кое да преименуваме.
SELECT name, SCHEMA_NAME(schema_id) AS 'Schema', OBJECT_NAME(parent_object_id) AS 'Table', definition FROM sys.check_constraints;
Резултат:
+-----------------+----------+----------------+----------------------------------------+ | 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') | +-----------------+----------+----------------+----------------------------------------+
Нека преименуваме второто ограничение ( chkValidEndDate ).
Нека премахнем Валиден част, така че да стане просто chkEndDate .
Пример 2 – Преименувайте ограничението
Изпълнете това, за да преименувате ограничението.
sp_rename 'dbo.chkValidEndDate', 'chkEndDate';
Така че старото (съществуващо) име е първо, следвано от новото име.
Така че сега, ако избера всички CHECK
отново ограничения, получавам следния резултат.
SELECT name, SCHEMA_NAME(schema_id) AS 'Schema', OBJECT_NAME(parent_object_id) AS 'Table', definition FROM sys.check_constraints;
Резултат:
+-------------+----------+----------------+----------------------------------------+ | 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') | +-------------+----------+----------------+----------------------------------------+
Името на ограничението е променено.
Както споменахме, sp_rename
съхранената процедура не се ограничава само до CHECK
ограничения. Можете да използвате абсолютно същия синтаксис, за да преименувате ограничение за външен ключ, таблица, колона, псевдоним тип данни или всеки друг обект, дефиниран от потребителя.
Въпреки това, Microsoft препоръчва да не се преименуват съхранени процедури, тригери, потребителски дефинирани функции или изгледи. В такива случаи Microsoft ви препоръчва вместо това да пуснете обекта и да го създадете отново с новото име.