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ó là 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 là 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.