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.