Bạn có thể sử dụng sp_rename
hệ thống lưu trữ thủ tục để đổi tên một ràng buộc khóa ngoại trong SQL Server.
Mục đích của thủ tục được lưu trữ này là cho phép bạn đổi tên các đối tượng do người dùng tạo trong cơ sở dữ liệu hiện tại, vì vậy bạn cũng có thể đổi tên các đối tượng khác như bảng, cột, kiểu dữ liệu bí danh, v.v.
Cú pháp
Cú pháp của sp_rename
như sau:
sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name' [ , [ @objtype = ] 'object_type' ]
Vì vậy, mã của bạn có thể giống như sau:
sp_rename 'schema_name.old_fk_name', 'new_fk_name';
Lưu ý rằng tài liệu của Microsoft nói rằng khi đổi tên các ràng buộc (chẳng hạn như khóa ngoài), bạn phải đủ điều kiện đặt tên hiện có với tên lược đồ.
Bạn có thể gặp hoặc không gặp lỗi nếu bỏ qua giản đồ, nhưng có lẽ bạn nên làm theo lời khuyên của Microsoft về lược đồ này.
Ví dụ sau đây cho thấy tôi đổi tên khóa ngoại.
Ví dụ 1 - Xem lại Tất cả các Khóa Ngoại
Trước tiên, tôi sẽ xem xét các khóa ngoại trong cơ sở dữ liệu (để tôi có thể quyết định đổi tên khóa nào).
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;
Kết quả:
+--------------------------------+----------+---------+--------------------+ | 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 | +--------------------------------+----------+---------+--------------------+
Khóa ngoại thứ ba ( FK__Artists__Country__4AB81AF0 ) đã được đặt tên bởi hệ thống. Hệ thống đặt tên cho nó vì tôi quên cung cấp tên khi tạo.
Hãy đặt tên ngắn gọn hơn cho khóa ngoại này.
Ví dụ 2 - Đổi tên Khoá ngoại
Đây là bit đổi tên khóa ngoại.
sp_rename 'dbo.FK__Artists__Country__4AB81AF0', 'FK_Artists_Country';
Như đã đề cập, tên cũ (hiện có) đứng trước, sau đó đến tên mới.
Vì vậy, bây giờ nếu tôi chọn tất cả các khóa ngoại, tôi nhận được kết quả sau.
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;
Kết quả:
+--------------------+----------+---------+--------------------+ | Foreign Key | Schema | Table | Referenced Table | |--------------------+----------+---------+--------------------| | FK_Albums_Artists | dbo | Albums | Artists | | FK_Albums_Genres | dbo | Albums | Genres | | FK_Artists_Country | dbo | Artists | Country | +--------------------+----------+---------+--------------------+
Tôi đã đổi tên thành công khóa ngoại.