Thỉnh thoảng tôi thấy mình đang gõ SHOW TABLES
trong SQL Server, mong đợi nhận được danh sách các bảng.
Điều đó sẽ hoàn toàn hợp lý nếu tôi đang sử dụng MySQL hoặc MariaDB. Nhưng SQL Server / T-SQL không có SHOW TABLES
như MySQL hoặc MariaDB, vì vậy nó không bao giờ hoạt động. Và tôi tiếp tục quên. Nhưng may mắn thay, SQL Server có các lựa chọn thay thế.
Dưới đây là năm tùy chọn để lấy danh sách các bảng trong SQL Server. Những thứ này có thể được sử dụng bất cứ khi nào bạn đang cố tìm SHOW TABLES
khó nắm bắt đó trong SQL Server.
Tùy chọn 1 - sys.tables
sys.tables
chế độ xem danh mục hệ thống được thiết kế đặc biệt để trả về thông tin bảng người dùng:
SELECT name
FROM sys.tables;
Điều này trả về tên của tất cả các bảng người dùng trong cơ sở dữ liệu hiện tại. Bạn có thể chuyển sang cơ sở dữ liệu chính xác bằng cách viết trước câu lệnh với USE <database name>
nơi <database name>
là tên của cơ sở dữ liệu mà bạn muốn liệt kê các bảng.
Ví dụ:câu lệnh sau trả về tất cả các bảng người dùng từ KrankyKranes
cơ sở dữ liệu:
USE KrankyKranes;
SELECT name
FROM sys.tables;
Bạn cũng có thể trả về lược đồ nếu muốn:
SELECT
SCHEMA_NAME(schema_id) AS schema_name,
name AS table_name
FROM sys.tables;
Ở đây, tôi đã sử dụng SCHEMA_NAME()
hàm để dịch giá trị của schema_id
vào tên thực của lược đồ.
Tùy chọn 2 - sys.objects
Bạn cũng có thể sử dụng sys.objects
xem danh mục hệ thống. Nếu bạn chọn tùy chọn này, bạn có thể lọc nó theo loại để chỉ các bảng người dùng được trả về:
SELECT name
FROM sys.objects
WHERE type = 'U';
Điều này trả về bảng người dùng từ cơ sở dữ liệu hiện tại. Chế độ xem này cũng chứa schema_id
nên bạn có thể sử dụng SCHEMA_NAME()
hàm để dịch điều đó thành tên lược đồ nếu được yêu cầu.
Tùy chọn 3 - information_schema.tables
INFORMATION_SCHEMA.TABLES
dạng xem trả về một hàng cho mỗi bảng hoặc dạng xem trong cơ sở dữ liệu hiện tại mà người dùng hiện tại có quyền.
Chúng tôi có thể lọc chế độ xem này theo loại để chỉ các bảng cơ sở được trả về:
SELECT
TABLE_SCHEMA,
TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'Base Table';
TABLE_SCHEMA
cột chứa tên giản đồ bảng và vì vậy chúng tôi không cần sử dụng SCHEMA_NAME()
để chuyển đổi ID giản đồ thành tên của nó.
Tùy chọn 4 - sp_tables
sp_tables
thủ tục được lưu trữ trả về một danh sách các đối tượng có thể được truy vấn trong môi trường hiện tại. Điều này có nghĩa là bất kỳ bảng hoặc dạng xem nào, ngoại trừ các đối tượng đồng nghĩa.
Cách nhanh nhất và dễ nhất để gọi thủ tục này là như sau:
sp_tables;
Nhưng điều đó có thể trả về một danh sách dài các đối tượng.
Thông thường tốt hơn là cụ thể hơn. Ví dụ:
EXEC sp_tables
@table_owner = 'dbo',
@table_qualifier = 'KrankyKranes',
@table_type = "'TABLE'";
Ở đây, tôi đang nói về quy trình hiển thị bảng người dùng trong KrankyKranes
cơ sở dữ liệu thuộc sở hữu của dbo
.
@table_type
đối số chấp nhận danh sách giá trị được phân tách bằng dấu phẩy. Vì vậy, nếu chúng tôi muốn bao gồm các lượt xem, chúng tôi có thể làm như sau:
EXEC sp_tables
@table_owner = 'dbo',
@table_qualifier = 'Music',
@table_type = "'TABLE', 'VIEW'";
Tùy chọn 5 - dbo.sysobjects
Trước SQL Server 2005, dbo.sysobjects
chế độ xem là chế độ xem để hiển thị các bảng và các đối tượng khác.
Vì vậy, nếu bạn đang sử dụng phiên bản SQL Server cũ, bạn có thể thực hiện việc này:
SELECT name
FROM dbo.sysobjects
WHERE xtype = 'U';