Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zmień nazwę klucza obcego w SQL Server za pomocą T-SQL

Możesz użyć sp_rename systemowa procedura składowana do zmiany nazwy ograniczenia klucza obcego w SQL Server.

Celem tej procedury składowanej jest umożliwienie zmiany nazw obiektów utworzonych przez użytkownika w bieżącej bazie danych, dzięki czemu można również zmienić nazwy innych obiektów, takich jak tabele, kolumny, typy danych aliasów itp.

Składnia

Składnia sp_rename idzie tak:

sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name'   
    [ , [ @objtype = ] 'object_type' ]

Twój kod może wyglądać mniej więcej tak:

sp_rename 'schema_name.old_fk_name', 'new_fk_name';

Zwróć uwagę, że dokumentacja Microsoft stwierdza, że ​​podczas zmiany nazwy ograniczeń (takich jak klucze obce) musisz zakwalifikować istniejącą nazwę do nazwy schematu.

Możesz, ale nie musisz, otrzymać błąd, jeśli pominiesz schemat, ale prawdopodobnie dobrym pomysłem jest zastosowanie się do rad Microsoftu w tej sprawie.

Poniższy przykład pokazuje, jak zmieniam nazwę klucza obcego.

Przykład 1 – Przejrzyj wszystkie klucze obce

Najpierw przyjrzę się kluczom obcym w bazie danych (abym mógł zdecydować, który z nich zmienić).

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;

Wynik:

+--------------------------------+----------+---------+--------------------+
| 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            |
+--------------------------------+----------+---------+--------------------+

Trzeci klucz obcy ( FK__Artists__Country__4AB81AF0 ) został nazwany przez system. System nazwał to, ponieważ zapomniałem podać nazwę podczas tworzenia.

Nadajmy temu kluczowi obcemu bardziej zwięzłą nazwę.

Przykład 2 – zmiana nazwy klucza obcego

Oto bit, który zmienia nazwę klucza obcego.

sp_rename 'dbo.FK__Artists__Country__4AB81AF0', 'FK_Artists_Country';

Jak wspomniano, najpierw jest stara (istniejąca) nazwa, a następnie nowa nazwa.

Więc teraz, jeśli wybiorę wszystkie klucze obce, otrzymam następujący wynik.

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;

Wynik:

+--------------------+----------+---------+--------------------+
| Foreign Key        | Schema   | Table   | Referenced Table   |
|--------------------+----------+---------+--------------------|
| FK_Albums_Artists  | dbo      | Albums  | Artists            |
| FK_Albums_Genres   | dbo      | Albums  | Genres             |
| FK_Artists_Country | dbo      | Artists | Country            |
+--------------------+----------+---------+--------------------+

Pomyślnie zmieniłem nazwę klucza obcego.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oblicz skrót MD5 ciągu UTF8

  2. Dlaczego (i jak) podzielić kolumnę za pomocą master..spt_values?

  3. Jak wstawić rekord z tylko wartościami domyślnymi?

  4. SQL LocalDB a SQL Server CE

  5. Jak uniknąć błędu dzielenia przez zero w SQL?