Du kan bruge sp_rename
systemlagret procedure for at omdøbe en fremmednøglebegrænsning i SQL Server.
Formålet med denne lagrede procedure er at give dig mulighed for at omdøbe brugeroprettede objekter i den aktuelle database, så du også kan omdøbe andre objekter såsom tabeller, kolonner, aliasdatatyper osv.
Syntaks
Syntaksen for sp_rename
går sådan her:
sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name' [ , [ @objtype = ] 'object_type' ]
Så din kode kunne se sådan ud:
sp_rename 'schema_name.old_fk_name', 'new_fk_name';
Bemærk, at Microsoft-dokumentationen angiver, at når du omdøber begrænsninger (såsom fremmednøgler), skal du kvalificere det eksisterende navn med skemanavnet.
Du får muligvis eller ikke får en fejl, hvis du udelader skemaet, men det er sandsynligvis en god idé at følge Microsofts råd om dette.
Følgende eksempel viser mig omdøbning af en fremmednøgle.
Eksempel 1 – Gennemgå alle fremmednøgler
Først vil jeg tage et kig på fremmednøglerne i databasen (så jeg kan beslutte, hvilken jeg skal omdøbe).
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;
Resultat:
+--------------------------------+----------+---------+--------------------+ | 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 | +--------------------------------+----------+---------+--------------------+
Den tredje fremmednøgle ( FK__Artists__Country__4AB81AF0 ) er blevet navngivet af systemet. Systemet navngav det, fordi jeg glemte at give et navn, da jeg oprettede det.
Lad os give denne fremmednøgle et mere kortfattet navn.
Eksempel 2 – Omdøb fremmednøglen
Her er den bit, der omdøber fremmednøglen.
sp_rename 'dbo.FK__Artists__Country__4AB81AF0', 'FK_Artists_Country';
Som nævnt kommer det gamle (eksisterende) navn først, derefter det nye navn.
Så nu, hvis jeg vælger alle fremmednøgler, får jeg følgende resultat.
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;
Resultat:
+--------------------+----------+---------+--------------------+ | Foreign Key | Schema | Table | Referenced Table | |--------------------+----------+---------+--------------------| | FK_Albums_Artists | dbo | Albums | Artists | | FK_Albums_Genres | dbo | Albums | Genres | | FK_Artists_Country | dbo | Artists | Country | +--------------------+----------+---------+--------------------+
Jeg har omdøbt fremmednøglen.