sql >> Database >  >> RDS >> Sqlserver

Hernoem een ​​externe sleutel in SQL Server met behulp van T-SQL

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.


  1. Gids voor het ontwerpen van een database voor kalendergebeurtenissen en herinneringen in MySQL

  2. Bevriezen beheren in PostgreSQL

  3. Krijg standaard seriële waarde na INSERT binnen PL/pgSQL

  4. Inzicht in SQL Server Always Encrypted