Bài viết này trình bày bốn cách để trả về danh sách dạng xem do người dùng xác định trong cơ sở dữ liệu SQL Server.
Nếu bạn chỉ muốn xem các chế độ xem hệ thống hoặc cả và do người dùng xác định chế độ xem hệ thống, hãy xem Sự khác biệt giữa sys.views, sys.system_views và sys.all_views trong SQL Server.
Tùy chọn 1 - Chế độ xem lược đồ thông tin VIEWS
Bạn có thể sử dụng VIEWS
chế độ xem lược đồ thông tin để nhận danh sách tất cả các chế độ xem do người dùng xác định trong cơ sở dữ liệu.
USE Music; SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS;
Kết quả:
+----------------+--------------+ | TABLE_SCHEMA | TABLE_NAME | |----------------+--------------| | dbo | RockAlbums | | dbo | JazzAlbums | | dbo | BluesAlbums | +----------------+--------------+
Trả lại Định nghĩa của Chế độ xem
INFORMATION_SCHEMA.VIEWS
chế độ xem cũng có VIEW_DEFINITION
, vì vậy bạn có thể dễ dàng trả lại định nghĩa của từng chế độ xem nếu cần.
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS;
Tùy chọn 2 - Chế độ xem danh mục hệ thống sys.views
Một cách khác để trả về danh sách các chế độ xem là truy vấn sys.views
chế độ xem danh mục hệ thống.
USE Music; SELECT SCHEMA_NAME(schema_id) AS [Schema], Name FROM sys.views;
Kết quả:
+----------+-------------+ | Schema | Name | |----------+-------------| | dbo | RockAlbums | | dbo | JazzAlbums | | dbo | BluesAlbums | +----------+-------------+
Trả lại Định nghĩa của Chế độ xem
sys.view
chế độ xem không bao gồm một cột cho định nghĩa của đối tượng. Nếu bạn muốn trả lại định nghĩa của từng chế độ xem, bạn có thể kết hợp nó với sys.sql_modules
chế độ xem hệ thống.
Ví dụ:
SELECT definition FROM sys.views v INNER JOIN sys.sql_modules m ON v.object_id = m.object_id;
Tùy chọn 3 - Chế độ xem danh mục hệ thống sys.objects
Một cách khác để trả về danh sách các dạng xem là truy vấn sys.objects
chế độ xem danh mục hệ thống.
SELECT SCHEMA_NAME(schema_id) AS [Schema], name FROM sys.objects WHERE type = 'V';
Kết quả:
+----------+-------------+ | Schema | name | |----------+-------------| | dbo | RockAlbums | | dbo | JazzAlbums | | dbo | BluesAlbums | +----------+-------------+
Loại V
dành cho "Chế độ xem". Một cách khác để làm điều này là lọc theo type_desc
cột:
SELECT SCHEMA_NAME(schema_id) AS [Schema], name FROM sys.objects WHERE type_desc = 'VIEW';
Trả lại Định nghĩa của Chế độ xem
sys.objects
chế độ xem không bao gồm một cột cho định nghĩa của đối tượng. Nếu bạn muốn trả lại định nghĩa của từng chế độ xem, bạn có thể kết hợp nó với sys.sql_modules
chế độ xem hệ thống.
Ví dụ:
SELECT definition FROM sys.objects o INNER JOIN sys.sql_modules m ON o.object_id = m.object_id WHERE type = 'V';
Tùy chọn 4 - Thủ tục lưu trữ 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 bao gồm bất kỳ bảng hoặc dạng xem nào, ngoại trừ các đối tượng đồng nghĩa.
Bạn có thể thu hẹp kết quả thành chỉ các chế độ xem bằng @table_type
tham số. Bạn cũng có thể thu hẹp nó thành chỉ một chủ sở hữu hoặc danh mục nhất định.
Việc thực thi đoạn mã sau sẽ trả về tất cả các chế độ xem trong cơ sở dữ liệu hiện tại - bao gồm cả các chế độ xem hệ thống.
EXEC sp_tables @table_type = "'VIEW'";
Tôi sẽ không trình bày kết quả ở đây vì đó là một danh sách dài.
Ở đây, nó được thu hẹp cho một chủ sở hữu cơ sở dữ liệu nhất định:
EXEC sp_tables @table_owner = 'dbo', @table_type = "'VIEW'";
Kết quả:
+-------------------+---------------+--------------+--------------+-----------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | TABLE_TYPE | REMARKS | |-------------------+---------------+--------------+--------------+-----------| | Music | dbo | BluesAlbums | VIEW | NULL | | Music | dbo | JazzAlbums | VIEW | NULL | | Music | dbo | RockAlbums | VIEW | NULL | +-------------------+---------------+--------------+--------------+-----------+