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.