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

Sử dụng OBJECTPROPERTY () để Tìm hiểu xem một Đối tượng có phải là Ràng buộc KIỂM TRA trong SQL Server hay không

Trong SQL Server, bạn có thể sử dụng OBJECTPROPERTY() hàm để tìm xem một đối tượng có phải là CHECK hay không ràng buộc.

Hàm này chấp nhận hai tham số:ID đối tượng và thuộc tính mà bạn đang kiểm tra.

Do đó, bạn có thể chuyển ID đối tượng làm đối số đầu tiên và IsCheckCnst là hàm thứ hai và hàm sẽ trả về 1 hoặc 0 tùy thuộc vào việc đó có phải là CHECK hay không hạn chế.

Giá trị trả về của 1 có nghĩa là nó một CHECK ràng buộc và giá trị 0 nghĩa là không phải vậy.

Ví dụ 1 - Kiểm tra Ràng buộc CHECK

Dưới đây là một ví dụ nhanh để chứng minh.

USE Test;
SELECT OBJECTPROPERTY(178099675, 'IsCheckCnst') AS [IsCheckCnst];

Kết quả:

+---------------+
| IsCheckCnst   |
|---------------|
| 1             |
+---------------+

Trong trường hợp này, Kiểm tra cơ sở dữ liệu có một đối tượng với ID được cung cấp và trên thực tế nó là một CHECK ràng buộc.

Ví dụ 2 - Lấy ID đối tượng

Nếu bạn biết tên của đối tượng, nhưng không biết ID của nó, bạn có thể sử dụng OBJECT_ID() chức năng truy xuất ID dựa trên tên của nó.

Ví dụ:

SELECT OBJECTPROPERTY(OBJECT_ID('chkEndDate'), 'IsCheckCnst') AS [IsCheckCnst];

Kết quả:

+---------------+
| IsCheckCnst   |
|---------------|
| 1             |
+---------------+

Trong trường hợp này, tôi đã kiểm tra cùng một đối tượng từ ví dụ trước.

Đây là một lần nữa với đầu ra ID riêng biệt.

SELECT 
  OBJECT_ID('chkEndDate') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('chkEndDate'), 'IsCheckCnst') AS [IsCheckCnst];

Kết quả:

+-------------+---------------+
| Object ID   | IsCheckCnst   |
|-------------+---------------|
| 178099675   | 1             |
+-------------+---------------+

Ví dụ 3 - Kiểm tra Bảng (tức là KHÔNG PHẢI Ràng buộc KIỂM TRA)

Đây là những gì sẽ xảy ra khi đối tượng không phải là CHECK ràng buộc.

SELECT OBJECTPROPERTY(18099105, 'IsCheckCnst') AS [IsCheckCnst];

Kết quả:

+---------------+
| IsCheckCnst   |
|---------------|
| 0             |
+---------------+

Trong trường hợp này, cơ sở dữ liệu không trên thực tế có một đối tượng với ID đó, nhưng đối tượng thực sự là một bảng, vì vậy tôi nhận được kết quả âm.

Ở đây, nó lại sử dụng OBJECT_ID() .

SELECT 
  OBJECT_ID('Individual') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('Individual'), 'IsCheckCnst') AS [IsCheckCnst];

Kết quả:

+-------------+---------------+
| Object ID   | IsCheckCnst   |
|-------------+---------------|
| 18099105    | 0             |
+-------------+---------------+

Ví dụ 4 - Đối tượng không tồn tại

SQL Server giả định rằng ID đối tượng nằm trong ngữ cảnh cơ sở dữ liệu hiện tại. Nếu bạn chuyển một ID đối tượng từ một cơ sở dữ liệu khác, bạn sẽ nhận được kết quả NULL hoặc bạn sẽ nhận được kết quả không chính xác.

SELECT 
  OBJECTPROPERTY(OBJECT_ID('NonExistentObject'), 'IsCheckCnst') AS [NonExistentObject],
  OBJECTPROPERTY(11111111, 'IsCheckCnst') AS [11111111];

Kết quả:

+---------------------+------------+
| NonExistentObject   | 11111111   |
|---------------------+------------|
| NULL                | NULL       |
+---------------------+------------+

Trong trường hợp này, cơ sở dữ liệu không chứa các đối tượng có tên hoặc ID đó.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Ràng buộc duy nhất trên nhiều bảng

  2. Làm cách nào để di chuyển một bảng vào một lược đồ trong T-SQL

  3. Khắc phục “date không tương thích với int” trong SQL Server khi thêm vào hoặc trừ ngày

  4. CHỌN CHO TỰ ĐỘNG XML và trả về các kiểu dữ liệu

  5. Không hỗ trợ OVER trong MS SQL Server 2005?