Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Trả về danh sách các bảng &chế độ xem trong SQL Server bằng T-SQL (sp_tables)

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ư sysINFORMATION_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 , TABLESYSTEMTABLE .

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 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ề TABLEVIEW .

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)

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lấy dữ liệu với bộ ký tự UTF-8 từ máy chủ MSSQL bằng phần mở rộng PHP FreeTDS

  2. Nối nhiều bảng trả về giá trị NULL

  3. Tìm hiểu cách Lưu trữ và Phân tích Tài liệu trên Hệ thống Tệp Windows với Tìm kiếm Ngữ nghĩa SQL Server - Phần 1

  4. Tôi có thực sự cần sử dụng SET XACT_ABORT ON không?

  5. Thực thi sp_msforeachdb trong ứng dụng Java