Bạn có thể sử dụng sp_rename
hệ thống lưu trữ thủ tục để đổi tên một CHECK
ràng buộc 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ể sử dụng nó để đổ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_constraint_name', 'new_constraint_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, bạn phải đủ điều kiện để đặt tên hiện có với tên lược đồ.
Ví dụ sau minh họa cách đổi tên một CHECK
ràng buộc.
Ví dụ 1 - Chọn Ràng buộc để Đổi tên
Đầu tiên, hãy liệt kê CHECK
các ràng buộc trong cơ sở dữ liệu, vì vậy chúng tôi có thể quyết định đổi tên cái nào.
SELECT name, SCHEMA_NAME(schema_id) AS 'Schema', OBJECT_NAME(parent_object_id) AS 'Table', definition FROM sys.check_constraints;
Kết quả:
+-----------------+----------+----------------+----------------------------------------+ | name | Schema | Table | definition | |-----------------+----------+----------------+----------------------------------------| | chkPrice | dbo | ConstraintTest | ([Price]>(0)) | | chkValidEndDate | dbo | ConstraintTest | ([EndDate]>=[StartDate]) | | chkTeamSize | dbo | ConstraintTest | ([TeamSize]>=(5) AND [TeamSize]<=(20)) | | chkJobTitle | dbo | Occupation | ([JobTitle]<>'Digital Nomad') | +-----------------+----------+----------------+----------------------------------------+
Hãy đổi tên ràng buộc thứ hai ( chkValidEndDate ).
Hãy xóa Hợp lệ một phần để nó chỉ trở thành chkEndDate .
Ví dụ 2 - Đổi tên Ràng buộc
Chạy điều này để đổi tên ràng buộc.
sp_rename 'dbo.chkValidEndDate', 'chkEndDate';
Vì vậy, tên cũ (hiện có) đứng trước, sau đó là tên mới.
Vì vậy, bây giờ nếu tôi chọn tất cả CHECK
một lần nữa, tôi nhận được kết quả sau.
SELECT name, SCHEMA_NAME(schema_id) AS 'Schema', OBJECT_NAME(parent_object_id) AS 'Table', definition FROM sys.check_constraints;
Kết quả:
+-------------+----------+----------------+----------------------------------------+ | name | Schema | Table | definition | |-------------+----------+----------------+----------------------------------------| | chkPrice | dbo | ConstraintTest | ([Price]>(0)) | | chkEndDate | dbo | ConstraintTest | ([EndDate]>=[StartDate]) | | chkTeamSize | dbo | ConstraintTest | ([TeamSize]>=(5) AND [TeamSize]<=(20)) | | chkJobTitle | dbo | Occupation | ([JobTitle]<>'Digital Nomad') | +-------------+----------+----------------+----------------------------------------+
Tên của ràng buộc đã được thay đổi.
Như đã đề cập, sp_rename
thủ tục được lưu trữ không chỉ giới hạn ở CHECK
hạn chế. Bạn có thể sử dụng chính xác cùng một cú pháp để đổi tên ràng buộc khóa ngoại, bảng, cột, kiểu dữ liệu bí danh hoặc bất kỳ đối tượng nào khác do người dùng xác định.
Tuy nhiên, Microsoft khuyến cáo không nên đổi tên các thủ tục, trình kích hoạt, chức năng hoặc chế độ xem do người dùng xác định. Trong những trường hợp như vậy, thay vào đó, Microsoft khuyên bạn nên thả đối tượng và tạo lại nó với tên mới.