Dưới đây là bài viết trình bày ba cách để nhanh chóng xác định có bao nhiêu bảng hệ thống trong cơ sở dữ liệu hiện tại trong SQL Server.
Cả ba tùy chọn đều sử dụng COUNT()
hoạt động trong khi truy vấn sys.objects
xem danh mục hệ thống. Tất cả đều dẫn đến cùng một đầu ra, vì vậy bạn thực sự không cần phải bỏ qua tùy chọn đầu tiên. Nhưng dù sao thì tôi cũng sẽ liệt kê chúng.
Tùy chọn 1 - Theo loại
Cách ngắn gọn nhất để làm điều này là lọc theo loại type
cột.
USE Music; SELECT COUNT(*) AS [Number of System Tables] FROM sys.objects WHERE type = 'S';
Kết quả:
+---------------------------+ | Number of System Tables | |---------------------------| | 72 | +---------------------------+
Ở đây, tôi lọc theo type
trong tổng số S
. S
là viết tắt của “Bảng cơ sở hệ thống”.
Nếu tôi chuyển sang cái chính cơ sở dữ liệu, tôi nhận được một kết quả khác:
USE Master; SELECT COUNT(*) AS [Number of System Tables] FROM sys.objects WHERE type = 'S';
Kết quả:
+---------------------------+ | Number of System Tables | |---------------------------| | 79 | +---------------------------+
Điều này là do bậc thầy cơ sở dữ liệu chứa một số bảng hệ thống không có trong các cơ sở dữ liệu khác.
Chúng ta có thể chạy truy vấn sau để lấy tên:
USE master; SELECT name FROM sys.objects WHERE type = 'S' AND name NOT IN ( SELECT name FROM model.sys.objects WHERE type = 'S' );
Kết quả:
+--------------------------+ | name | |--------------------------| | sysextendedrecoveryforks | | syslogshippers | | sysmatrixageforget | | sysmatrixages | | sysmatrixbricks | | sysmatrixconfig | | sysmatrixmanagers | +--------------------------+
Trong trường hợp này, tôi so sánh cái chính cơ sở dữ liệu cho mô hình cơ sở dữ liệu. Bạn có thể chỉ định rõ ràng một cơ sở dữ liệu khác bằng cách hoán đổi model
với tên của cơ sở dữ liệu khác.
Tùy chọn 2 - Theo "Loại mô tả"
Một tùy chọn khác là lọc theo type_desc
thay vì type
cột.
USE Music; SELECT COUNT(*) AS [Number of System Tables] FROM sys.objects WHERE type_desc = 'SYSTEM_TABLE';
Kết quả:
+---------------------------+ | Number of System Tables | |---------------------------| | 72 | +---------------------------+
Tùy chọn 3 - Theo OBJECTPROPERTY ()
Nếu vì lý do nào đó mà bạn thấy hai tùy chọn trước đó không phù hợp, bạn có thể thử sử dụng OBJECTPROPERTY()
hàm số.
Hàm này chấp nhận hai đối số:một ID đối tượng và một thuộc tính. ID đối tượng có thể là ID bảng và thuộc tính có thể là IsSystemTable
, xác định đối tượng có phải là bảng hệ thống hay không.
Do đó, bạn có thể làm như sau:
USE Music; SELECT COUNT(*) AS [Number of System Tables] FROM sys.objects WHERE OBJECTPROPERTY(object_id, 'IsSystemTable') = 1;
Kết quả:
+---------------------------+ | Number of System Tables | |---------------------------| | 72 | +---------------------------+
Liệt kê các bảng
Bạn có thể sửa đổi ba tùy chọn nếu muốn liệt kê các bảng thay vì chỉ đếm chúng. Để thực hiện việc này, chỉ cần thay thế COUNT(*) AS [Number of User Tables]
với *
. Ngoài ra, bạn có thể đặt tên rõ ràng cho các cột mà bạn muốn trả về.
Đếm số bảng do người dùng xác định
Nếu bạn cần tìm hiểu số lượng người dùng bảng, xem 5 cách đếm số lượng bảng do người dùng xác định trong SQL Server.