SQL Server: Câu lệnh SQL hiển thị tất cả các bảng

Đôi khi bạn muốn lấy tất cả các bảng trong Cơ sở dữ liệu lưu trữ trong SQL Server, tùy thuộc vào phiên bản SQL Server bạn đang chạy, cách thức truy vấn và trả về danh sách tất cả các bảng do người dùng tạo có thể khác nhau đôi chút. Dưới đây chúng tôi sẽ trình bày một cách ngắn gọn các câu lệnh TSQL có thể được sử dụng để truy xuất danh sách các bảng cho cả các phiên bản SQL Server 2000 cũ hơn và phiên bản 2005 mới hơn sau này.

Select All Tables in SQL Server

Liệt kê các bảng trong SQL Server 2000

Với các phiên bản SQL Server cũ (như SQL Server 2000, mặc dù phương thức này cũng được hỗ trợ trong SQL Server 2005 cho vấn đề tương thích ngược ), Bạn sẽ cần truy vấn qua View SYS.SYSOBJECTS. SYS.SYSOBJECTS chứa các hàng cho mỗi đối tượng được tạo trong cơ sở dữ liệu bao gồm stored procedures, views, và các bảng user (mà rất quan trọng để phân biệt với các bảng dữ liệu của hệ thống).

Bảng SYSOBJECTS chứa hàng chục cột dữ liệu vì nó phải chứa thông tin về hầu như mọi thứ được thêm vào máy chủ theo thời gian. Do đó, để tìm danh sách các bảng do người dùng tạo (bỏ qua các bảng dữ liệu củahệ thống), chúng ta chỉ cần tìm kết quả thoả mãn điều kiện cột xtype bằng với giá trị U (các bảng dữ liệu người dùng tạo được đánh dấu là U). Câu lệnh TSQL sẽ viết như sau:


SELECT
  *
FROM
  SYSOBJECTS
WHERE
  xtype = 'U';
GO

Liệt kê các bảng trong SQL Server 2005 hoặc mới hơn

Liệt kê tất cả các bảng ở phiên bản SQL Server mới hơn (từ SQL Server 2005 trở lên) được thực hiện truy vấn thông qua các view trong INFORMATION_SCHEMA mà được tự động tích hợp vào SQL Server. Điều này cho phép bạn dễ dàng xem các siêu dữ liệu cho từng trường hợp cụ của bản cài SQL Server như bao gồm thông tin về COLUMNS, ROUTINES, và thậm trí TABLES.

Bạn có thể chú ý rằng có bốn cột được trả về khi sử dụng view INFORMATION_SCHEMA.TABLES, nhưng quan trọng nhất là cột TABLE_TYPE mà xác định bảng đó là bảng dữ liệu gốc (BASE TABLE) hay view (VIEW).

Để trả về tất cả các bảng và các view, thì câu lệnh TSQL sẽ là:


SELECT
  *
FROM
  INFORMATION_SCHEMA.TABLES;
GO

Bạn cũng có thể chỉ định một cơ sở dữ liệu cụ thể:


SELECT
  *
FROM
  databaseName.INFORMATION_SCHEMA.TABLES;
GO

Nếu bạn chỉ muốn truy vấn lấy các bảng thực và lọc ra các View kết quả, hãy thêm điều kiện WHERE TABLE_TYPE = 'BASE TABLE':


SELECT
  *
FROM
  databaseName.INFORMATION_SCHEMA.TABLES
WHERE
  TABLE_TYPE = 'BASE TABLE';
GO

Có thể bạn sẽ thích…

Trả lời