Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Đổi tên Ràng buộc KIỂM TRA trong SQL Server bằng T-SQL

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Trả về tất cả các kết hợp giá trị có thể có trên các cột trong SQL

  2. Ý nghĩa của SELECT ... FOR XML PATH (''), 1,1) là gì?

  3. Ứng dụng C # đa luồng với các lệnh gọi cơ sở dữ liệu SQL Server

  4. Nhiều hàng cho một giá trị được phân tách bằng dấu phẩy trong Sql Server

  5. Kiểm tra xem một đối tượng có phải là một thủ tục được lưu trữ hay không bằng cách sử dụng OBJECTPROPERTY () trong SQL Server