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

Sử dụng OBJECTPROPERTY () để tìm hiểu xem một Bảng có phải là một Bảng hệ thống trong SQL Server hay không

OBJECTPROPERTY() trong SQL Server cho phép bạn kiểm tra một đối tượng cho một thuộc tính cụ thể.

Bạn có thể sử dụng chức năng này để kiểm tra xem một đối tượng có phải là một bảng hệ thống hay không. Để thực hiện việc này, hãy chuyển ID đối tượng làm đối số đầu tiên và IsSystemTable như đối số thứ hai. Hàm trả về 1 hoặc 0 tùy thuộc vào việc đó có phải là một bảng hệ thống hay không (1 có nghĩa là nó bảng hệ thống và 0 nghĩa là không).

Ví dụ 1 - Cách sử dụng cơ bản

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

SELECT OBJECTPROPERTY(3, 'IsSystemTable') AS [IsSystemTable];

Kết quả:

+-----------------+
| IsSystemTable   |
|-----------------|
| 1               |
+-----------------+

Trong trường hợp này, đối tượng một bảng hệ thống.

Ví dụ 2 - Đối tượng KHÔNG phải là Bảng Hệ thống

Đây là những gì sẽ xảy ra khi đối tượng không phải là một bảng hệ thống.

SELECT OBJECTPROPERTY(1013578649, 'IsSystemTable') AS [IsSystemTable];

Kết quả:

+-----------------+
| IsSystemTable   |
|-----------------|
| 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 do người dùng xác định, vì vậy tôi nhận được kết quả âm.

Ở đây, nó lại sử dụng OBJECT_ID() để lấy ID từ tên của đối tượng.

SELECT 
  OBJECT_ID('Dimension.City') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'IsSystemTable') AS [IsSystemTable],
  OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'IsUserTable') AS [IsUserTable];

Kết quả:

+-------------+-----------------+---------------+
| Object ID   | IsSystemTable   | IsUserTable   |
|-------------+-----------------+---------------|
| 1013578649  | 0               | 1             |
+-------------+-----------------+---------------+

Tôi cũng đã kiểm tra xem đối tượng có phải là bảng do người dùng xác định hay không và kết quả là dương tính.

Ví dụ 3 - Đố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('InvalidObject'), 'IsSystemTable') AS [InvalidObject],
  OBJECTPROPERTY(12345678, 'IsSystemTable') AS [12345678];

Kết quả:

+-----------------+------------+
| InvalidObject   | 12345678   |
|-----------------+------------|
| 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 đó, vì vậy tôi nhận được kết quả NULL.

Bạn cũng sẽ nhận được NULL do lỗi hoặc nếu bạn không có quyền xem đối tượng.


  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 Server Tính khả dụng cao:Cài đặt phiên bản cụm chuyển đổi dự phòng SQL Server Phần 2

  2. Cách nhanh nhất để thực hiện chèn hàng loạt lồng nhau với việc sử dụng scope_identity ()?

  3. Các vấn đề về hiệu suất với SQL Server 2012 Enterprise Edition theo cấp phép CAL

  4. Không thể giải quyết xung đột đối chiếu giữa SQL_Latin1_General_CP1_CI_AS và Latin1_General_CI_AS trong hoạt động ngang nhau

  5. chuyển đổi Số sê-ri Ngày trong Excel thành Ngày Thông thường