Trong SQL Server, bạn có thể sử dụng sp_tables
hệ thống lưu trữ thủ tục để có được danh sách các bảng và dạng xem trong môi trường hiện tại.
Bạn có thể trả lại tất cả các bảng và chế độ xem hoặc bạn có thể thu hẹp nó thành một chủ sở hữu, loại, mẫu cụ thể hoặc thậm chí một bảng hoặc chế độ xem cụ thể.
Cú pháp
Cú pháp như sau:
sp_tables [ [ @table_name = ] 'name' ] [ , [ @table_owner = ] 'owner' ] [ , [ @table_qualifier = ] 'qualifier' ] [ , [ @table_type = ] "type" ] [ , [@fUsePattern = ] 'fUsePattern'];
Tất cả các đối số là tùy chọn.
Ví dụ 1 - Không đối số
Bạn có thể thực hiện thủ tục được lưu trữ này mà không có bất kỳ đối số nào. Làm điều này sẽ trả về tất cả các bảng và dạng xem trong môi trường hiện tại.
Như thế này:
EXEC sp_tables;
Điều này trả về hơn 500 hàng trên hệ thống của tôi, vì vậy tôi sẽ không cung cấp kết quả ở đây. Ngoài việc trả về các bảng và dạng xem do người dùng xác định, nó cũng trả về các đối tượng hệ thống, chẳng hạn như sys
và INFORMATION_SCHEMA
bảng và chế độ xem.
Ví dụ 2 - Tất cả các đối số
Ở khía cạnh khác, đây là một ví dụ bao gồm tất cả các đối số. Điều này thu hẹp các kết quả xuống một tên bảng cụ thể, một loại cụ thể, một bộ định tính cụ thể và một chủ sở hữu cụ thể.
EXEC sp_tables @table_name = 'Customers', @table_owner = 'Sales', @table_qualifier = 'WideWorldImporters', @table_type = "'TABLE'", @fUsePattern = 1;
Kết quả:
+--------------------+---------------+--------------+--------------+-----------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | TABLE_TYPE | REMARKS | |--------------------+---------------+--------------+--------------+-----------| | WideWorldImporters | Sales | Customers | TABLE | NULL | +--------------------+---------------+--------------+--------------+-----------+
Ví dụ 3 - Trả về một bảng cụ thể
Một cách dễ dàng hơn để trả về một bảng cụ thể là chỉ cần sử dụng đối số đầu tiên.
Như thế này:
EXEC sp_tables @table_name = 'Customers';
Hay thậm chí ngắn gọn hơn, như một trong những điều sau:
EXEC sp_tables 'Customers'; sp_tables 'Customers';
Mặc dù vậy, hãy lưu ý rằng bạn có thể nhận được nhiều hơn một hàng. Trong ví dụ này, hai hàng được trả về:
+--------------------+---------------+--------------+--------------+-----------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | TABLE_TYPE | REMARKS | |--------------------+---------------+--------------+--------------+-----------| | WideWorldImporters | Sales | Customers | TABLE | NULL | | WideWorldImporters | Website | Customers | VIEW | NULL | +--------------------+---------------+--------------+--------------+-----------+
Hàng đầu tiên dành cho bảng và hàng thứ hai là dạng xem.
Nếu tôi không muốn xem bất kỳ chế độ xem hoặc bảng hệ thống nào, tôi có thể thêm một đối số nữa để chỉ định loại bảng.
Ví dụ 4 - Trả về một loại bảng cụ thể
Ở đây, tôi tinh chỉnh ví dụ trước, bằng cách chỉ xác định loại bảng mà tôi quan tâm, cùng với tên của bảng.
EXEC sp_tables @table_name = 'Customers', @table_type = "'TABLE'";
Kết quả:
+--------------------+---------------+--------------+--------------+-----------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | TABLE_TYPE | REMARKS | |--------------------+---------------+--------------+--------------+-----------| | WideWorldImporters | Sales | Customers | TABLE | NULL | +--------------------+---------------+--------------+--------------+-----------+
Các loại được chấp nhận bao gồm VIEW
, TABLE
và SYSTEMTABLE
.
Lưu ý rằng các loại bảng phải là chữ hoa.
Ví dụ 5 - Trả về Nhiều Loại Bảng
Bạn có thể nhận thấy rằng cú pháp cho loại bảng sử dụng dấu ngoặc kép và dấu ngoặc kép. Điều này là do nó chấp nhận danh sách các loại bảng được phân tách bằng dấu phẩy. Toàn bộ danh sách được đặt trong dấu ngoặc kép và mỗi mục danh sách được đặt trong dấu ngoặc kép, với dấu phẩy phân tách từng mục.
Dưới đây là một ví dụ về các loại bảng trả về TABLE
và VIEW
.
EXEC sp_tables @table_type = "'TABLE','VIEW'";
Lưu ý rằng nếu SET QUOTED_IDENTIFIER
ON
, mỗi dấu ngoặc kép phải được nhân đôi và toàn bộ tham số phải được đặt trong dấu ngoặc kép.
Ví dụ 6 - Lưu ý về Đối số của Bộ phân tích bảng
Nếu bạn sử dụng @table_qualifier
, giá trị của nó phải giống với môi trường hiện tại, nếu không bạn sẽ gặp lỗi. Trong SQL Server, bộ định tính bảng đại diện cho tên cơ sở dữ liệu. Trong một số sản phẩm, nó đại diện cho tên máy chủ của môi trường cơ sở dữ liệu của bảng.
Dưới đây là những gì sẽ xảy ra trong SQL Server nếu tôi sử dụng một giá trị khác với cơ sở dữ liệu hiện tại:
USE Music; EXEC sp_tables @table_qualifier = 'WideWorldImporters';
Kết quả:
Msg 15250, Level 16, State 1, Procedure sp_tables, Line 86 The database name component of the object qualifier must be the name of the current database.
Ví dụ 7 - Ký tự đại diện
Bạn có thể sử dụng @fUsePattern
đối số để chỉ định xem dấu gạch dưới (_
), phần trăm (%
) và dấu ngoặc ([
hoặc ]
) ký tự được hiểu là ký tự đại diện. Giá trị hợp lệ là 0
(khớp mẫu bị tắt) và 1
(khớp mẫu đang bật). Giá trị mặc định là 1
.
Dưới đây là một ví dụ về việc sử dụng đối sánh mẫu để trả về các tên bảng bắt đầu bằng chữ cái “A”:
EXEC sp_tables @table_name = 'A%', @table_type = "'TABLE'", @fUsePattern = 1;
Kết quả:
+-------------------+---------------+--------------+--------------+-----------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | TABLE_TYPE | REMARKS | |-------------------+---------------+--------------+--------------+-----------| | Music | dbo | Albums | TABLE | NULL | | Music | dbo | Artists | TABLE | NULL | +-------------------+---------------+--------------+--------------+-----------+
Nhưng đây là điều sẽ xảy ra nếu tôi tắt tính năng đối sánh mẫu:
EXEC sp_tables @table_name = 'A%', @table_type = "'TABLE'", @fUsePattern = 0;
Kết quả:
(0 rows affected)