sql >> Databasteknik >  >> RDS >> Sqlserver

Byt namn på en främmande nyckel i SQL Server med T-SQL

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.


  1. Bestämma OID för en tabell i Postgres 9.1?

  2. MariaDB BENCHMARK() Förklarat

  3. Oracle sql:ordning efter och distinkt klausul

  4. Använda OpenVPN för att säkra åtkomst till ditt databaskluster i molnet