U kunt de sp_rename
. gebruiken systeem opgeslagen procedure om een externe sleutelbeperking in SQL Server te hernoemen.
Het doel van deze opgeslagen procedure is om u in staat te stellen door de gebruiker gemaakte objecten in de huidige database te hernoemen, zodat u ook andere objecten kunt hernoemen, zoals tabellen, kolommen, aliasgegevenstypen, enz.
Syntaxis
De syntaxis van sp_rename
gaat als volgt:
sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name' [ , [ @objtype = ] 'object_type' ]
Dus je code zou er ongeveer zo uit kunnen zien:
sp_rename 'schema_name.old_fk_name', 'new_fk_name';
Houd er rekening mee dat in de Microsoft-documentatie staat dat bij het hernoemen van beperkingen (zoals externe sleutels) u de bestaande naam moet kwalificeren met de schemanaam.
U kunt wel of niet een foutmelding krijgen als u het schema weglaat, maar het is waarschijnlijk een goed idee om het advies van Microsoft hierover op te volgen.
In het volgende voorbeeld zie ik hoe ik een externe sleutel hernoem.
Voorbeeld 1 – Controleer alle buitenlandse sleutels
Eerst zal ik de externe sleutels in de database bekijken (zodat ik kan beslissen welke ik wil hernoemen).
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;
Resultaat:
+--------------------------------+----------+---------+--------------------+ | 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 | +--------------------------------+----------+---------+--------------------+
De derde externe sleutel ( FK__Artists__Country__4AB81AF0 ) is door het systeem benoemd. Het systeem noemde het omdat ik vergat een naam op te geven toen ik het maakte.
Laten we deze externe sleutel een kortere naam geven.
Voorbeeld 2 – Hernoem de externe sleutel
Dit is het bit dat de externe sleutel hernoemt.
sp_rename 'dbo.FK__Artists__Country__4AB81AF0', 'FK_Artists_Country';
Zoals gezegd, eerst de oude (bestaande) naam, dan de nieuwe naam.
Dus als ik nu alle externe sleutels selecteer, krijg ik het volgende resultaat.
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;
Resultaat:
+--------------------+----------+---------+--------------------+ | Foreign Key | Schema | Table | Referenced Table | |--------------------+----------+---------+--------------------| | FK_Albums_Artists | dbo | Albums | Artists | | FK_Albums_Genres | dbo | Albums | Genres | | FK_Artists_Country | dbo | Artists | Country | +--------------------+----------+---------+--------------------+
Ik heb de externe sleutel met succes hernoemd.