Можете да използвате sp_rename
системна съхранена процедура за преименуване на ограничение за външен ключ в SQL Server.
Целта на тази съхранена процедура е да ви позволи да преименувате създадени от потребителя обекти в текущата база данни, така че можете да преименувате и други обекти като таблици, колони, типове данни с псевдоним и т.н.
Синтаксис
Синтаксисът на sp_rename
става така:
sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name' [ , [ @objtype = ] 'object_type' ]
Така че кодът ви може да е нещо подобно:
sp_rename 'schema_name.old_fk_name', 'new_fk_name';
Имайте предвид, че в документацията на Microsoft се посочва, че когато преименувате ограничения (като външни ключове), трябва да квалифицирате съществуващото име с името на схемата.
Може да получите или да не получите грешка, ако пропуснете схемата, но вероятно е добра идея да следвате съвета на Microsoft за това.
Следният пример показва как преименувам външен ключ.
Пример 1 – Преглед на всички външни ключове
Първо, ще разгледам външните ключове в базата данни (за да мога да реша кой да преименувам).
SELECT name AS 'Foreign Key', SCHEMA_NAME(schema_id) AS 'Schema', OBJECT_NAME(parent_object_id) AS 'Table', OBJECT_NAME(referenced_object_id) AS 'Referenced Table' FROM sys.foreign_keys;
Резултат:
+--------------------------------+----------+---------+--------------------+ | Foreign Key | Schema | Table | Referenced Table | |--------------------------------+----------+---------+--------------------| | FK_Albums_Artists | dbo | Albums | Artists | | FK_Albums_Genres | dbo | Albums | Genres | | FK__Artists__Country__4AB81AF0 | dbo | Artists | Country | +--------------------------------+----------+---------+--------------------+
Третият външен ключ ( FK__Artists__Country__4AB81AF0 ) е именуван от системата. Системата го нарече, защото забравих да дам име, когато го създадох.
Нека дадем на този външен ключ по-сбито име.
Пример 2 – Преименувайте външния ключ
Ето частта, която преименува външния ключ.
sp_rename 'dbo.FK__Artists__Country__4AB81AF0', 'FK_Artists_Country';
Както споменахме, първо идва старото (съществуващо) име, а след това новото име.
Така че сега, ако избера всички външни ключове, получавам следния резултат.
SELECT name AS 'Foreign Key', SCHEMA_NAME(schema_id) AS 'Schema', OBJECT_NAME(parent_object_id) AS 'Table', OBJECT_NAME(referenced_object_id) AS 'Referenced Table' FROM sys.foreign_keys;
Резултат:
+--------------------+----------+---------+--------------------+ | Foreign Key | Schema | Table | Referenced Table | |--------------------+----------+---------+--------------------| | FK_Albums_Artists | dbo | Albums | Artists | | FK_Albums_Genres | dbo | Albums | Genres | | FK_Artists_Country | dbo | Artists | Country | +--------------------+----------+---------+--------------------+
Успешно преименувах външния ключ.