Trong SQL Server, bạn có thể sử dụng sp_rename
thủ tục được lưu trữ để đổi tên đối tượng do người dùng tạo trong cơ sở dữ liệu hiện tại, bao gồm cả khóa chính.
Điều này có thể hữu ích nếu bạn có một khóa chính được gán tên tự động và bây giờ bạn muốn đặt cho nó một cái tên dễ đọc hơn.
Khi bạn tạo một khóa chính mà không cung cấp tên cho nó một cách rõ ràng, SQL Server sẽ tự động ủy quyền một tên cho nó. Những tên như vậy thường bao gồm một hậu tố số dài, điều này làm cho nó khó nhớ hơn. Nếu bạn cần tham chiếu đến khóa chính đó (ví dụ:trong mã, tài liệu của bạn, v.v.), những tên như vậy có thể khiến cuộc sống của bạn trở nên khó khăn hơn. May mắn thay, sp_rename
cung cấp một cách nhanh chóng và dễ dàng để thay đổi tên này.
Cú pháp
Cú pháp cho sp_rename
như sau:
sp_rename
[ @objname = ] 'object_name' ,
[ @newname = ] 'new_name'
[ , [ @objtype = ] 'object_type' ]
Đối với khóa chính (và các ràng buộc khác), loại đối tượng là OBJECT
.
Ví dụ
Trước tiên, hãy lấy tên của khóa chính mà chúng ta muốn thay đổi:
SELECT
SCHEMA_NAME(schema_id) AS SchemaName,
name AS PrimaryKey
FROM sys.objects
WHERE parent_object_id = (OBJECT_ID('dbo.t1'))
AND type = 'PK';
Kết quả:
+--------------+--------------------------+ | SchemaName | PrimaryKey | |--------------+--------------------------| | dbo | PK__t1__3213663B10938530 | +--------------+--------------------------+
Đây là khóa chính cho bảng có tên t1
, Vì vậy, chúng tôi sẽ tiếp tục và đổi tên khóa chính đó.
Khi bạn đổi tên khóa chính, bạn cần đưa vào lược đồ với tên hiện tại.
Ví dụ:
EXEC sp_rename 'dbo.PK__t1__3213663B10938530', 'PK_t1';
Khi bạn đổi tên khóa chính (hoặc bất kỳ đối tượng nào khác) trong SQL Server, bạn có thể sẽ thấy thông báo sau:
Caution: Changing any part of an object name could break scripts and stored procedures.
Về cơ bản, điều này cho chúng ta biết rằng bất kỳ tập lệnh và / hoặc thủ tục được lưu trữ nào tham chiếu đến đối tượng hiện có thể bị hỏng và cần được cập nhật cho phù hợp để phản ánh tên mới.
Bất kể, khóa chính hiện đã được đổi tên.
Chúng tôi có thể xác minh điều này bằng cách chạy lại truy vấn trước đó:
SELECT
SCHEMA_NAME(schema_id) AS SchemaName,
name AS PrimaryKey
FROM sys.objects
WHERE parent_object_id = (OBJECT_ID('dbo.t1'))
AND type = 'PK';
Kết quả:
+--------------+--------------+ | SchemaName | PrimaryKey | |--------------+--------------| | dbo | PK_t1 | +--------------+--------------+
Bao gồm loại đối tượng
Bạn cũng có thể bao gồm kiểu đối tượng làm đối số thứ ba. Đối với khóa chính và các ràng buộc khác, hãy sử dụng OBJECT
:
EXEC sp_rename 'dbo.PK__t1__3213663B10938530', 'PK_t1', 'OBJECT';
Bao gồm Tên tham số
Như với bất kỳ thủ tục được lưu trữ nào, bạn cũng có thể bao gồm tên tham số khi gọi sp_rename
:
EXEC sp_rename
@objname = 'dbo.PK__t1__3213663B10938530',
@newname = 'PK_t1',
@objtype = 'OBJECT';
Điều này thực hiện chính xác cùng một điều (đổi tên khóa chính được chỉ định).