Du kan använda sp_rename
systemlagrad procedur för att byta namn på en främmande nyckelbegrä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å att du även kan 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_fk_name', 'new_fk_name';
Observera att Microsofts dokumentation anger att när du byter namn på begränsningar (som främmande nycklar) måste du kvalificera det befintliga namnet med schemanamnet.
Du kanske får eller inte får ett felmeddelande om du utelämnar schemat, men det är förmodligen en bra idé att följa Microsofts råd om detta.
Följande exempel visar att jag byter namn på en främmande nyckel.
Exempel 1 – Granska alla främmande nycklar
Först ska jag ta en titt på de främmande nycklarna i databasen (så att jag kan bestämma vilken jag ska byta namn på).
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 främmande nyckeln ( FK__Artists__Country__4AB81AF0 ) har namngetts av systemet. Systemet döpte det eftersom jag glömde att ange ett namn när jag skapade det.
Låt oss ge denna främmande nyckel ett mer kortfattat namn.
Exempel 2 – Byt namn på den främmande nyckeln
Här är biten som byter namn på den främmande nyckeln.
sp_rename 'dbo.FK__Artists__Country__4AB81AF0', 'FK_Artists_Country';
Som nämnts kommer det gamla (befintliga) namnet först, sedan det nya namnet.
Så nu om jag väljer alla främmande nycklar får jag följande 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 | +--------------------+----------+---------+--------------------+
Jag har framgångsrikt bytt namn på den främmande nyckeln.