Trong SQL Server, bạn có thể sử dụng bất kỳ cách nào trong số năm cách sau để trả về danh sách các bảng tạm thời bằng Transact-SQL.
Các bảng này trả về cả bảng tạm thời cục bộ và toàn cầu.
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.
SELECT name FROM tempdb.sys.tables WHERE name LIKE '#%';
Như với tất cả các chế độ xem trên trang này, khi chúng tôi muốn có thông tin về tạm thời bảng, chúng tôi cần truy vấn chế độ xem này trong tempdb cơ sở dữ liệu. Chúng tôi có thể thực hiện việc này bằng cách chuyển sang cơ sở dữ liệu đó trước (để đó là cơ sở dữ liệu hiện tại của chúng tôi) hoặc xác định điều kiện truy vấn của chúng tôi với tên cơ sở dữ liệu.
Trong ví dụ này, tôi đủ điều kiện cho truy vấn với tên cơ sở dữ liệu.
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 sẽ cần lọc nó theo loại để chỉ các bảng người dùng được trả về.
SELECT name FROM tempdb.sys.objects WHERE type = 'U';
U
là viết tắt của “User Table”. Một cách khác để làm điều này là sử dụng WHERE type_desc = 'USER_TABLE'
.
Tùy chọn 3 - INFORMATION_SCHEMA.TABLES
Nếu bạn muốn có tùy chọn tiêu chuẩn ANSI, hãy sử dụng INFORMATION_SCHEMA.TABLES
lượt xem. Nếu bạn chọn tùy chọn này, bạn cũng sẽ cần lọc nó theo loại để chỉ "bảng cơ sở" được trả về.
SELECT TABLE_NAME FROM TempDB.INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'Base Table';
Tùy chọn 4 - sp_tables
Nếu bạn đang tìm kiếm một tùy chọn quy trình được lưu trữ, hãy sp_tables
thủ tục được lưu trữ sẽ thực hiện thủ thuật.
USE tempdb; EXEC sp_tables '#%';
Bạn cũng có thể bao gồm tên đối số một cách rõ ràng.
USE tempdb; EXEC sp_tables @table_name = '#%', @table_owner = 'dbo', @table_qualifier = 'tempdb', @table_type = "'TABLE'", @fUsePattern = 1;
Bạn sẽ nhận thấy rằng tôi đã chuyển sang tempdb trước khi thực hiện thủ tục này, mặc dù tôi đã cung cấp cơ sở dữ liệu dưới dạng một trong các đối số. Điều này thực sự được yêu cầu. @table_qualifier
đối số phải khớp với cơ sở dữ liệu hiện tại.
Cũng lưu ý rằng @fUsePattern
mẫu phải là 1 trong trường hợp này, vì tôi đang sử dụng toán tử ký tự đại diện trong tên bảng. Đặt nó thành 1
cho phép đối sánh mẫu. Đặt nó thành 0
sẽ vô hiệu hóa đối sánh mẫu.
Tùy chọn 5 - dbo.sysobjects
Đây có lẽ không phải là một lựa chọn, nhưng tôi sẽ liệt kê nó. dbo.sysobjects
chế độ xem chỉ được bao gồm trong SQL Server để tương thích ngược. Nó đã được đánh dấu là không dùng nữa và Microsoft khuyên bạn không nên sử dụng nó. Nếu bạn gặp nó trong mã của mình, có thể xem xét thay đổi nó thành một trong các tùy chọn trước đó.
Trong mọi trường hợp, đây là giao diện của nó:
SELECT name FROM tempdb..sysobjects WHERE name LIKE '#%';
Nếu bạn đang tự hỏi dấu chấm kép dùng để làm gì (..
), đó là một cách nhanh chóng để chỉ định lược đồ mặc định. Trong trường hợp này, lược đồ mặc định là dbo
, vì vậy chúng tôi cũng có thể viết như sau:
SELECT name FROM tempdb.dbo.sysobjects WHERE name LIKE '#%';