Trong SQL Server, bạn có thể sử dụng VIEWS
Transact-SQL dạng xem lược đồ thông tin hệ thống để trả về thông tin về một hoặc nhiều dạng xem trong cơ sở dữ liệu hiện tại. Nó trả về một hàng cho các dạng xem mà người dùng hiện tại có thể truy cập trong cơ sở dữ liệu hiện tại.
Để sử dụng chế độ xem này, hãy chỉ định tên đủ điều kiện của INFORMATION_SCHEMA.VIEWS
.
Ví dụ 1 - Trả lại Thông tin về Chế độ xem Cụ thể
Dưới đây là một ví dụ về việc trả lại thông tin về tất cả các chế độ xem mà người dùng hiện tại có quyền truy cập trong cơ sở dữ liệu hiện tại.
SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, CHECK_OPTION, IS_UPDATABLE FROM INFORMATION_SCHEMA.VIEWS;
Kết quả:
+-----------------+----------------+--------------+----------------+----------------+ | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | CHECK_OPTION | IS_UPDATABLE | |-----------------+----------------+--------------+----------------+----------------| | Music | dbo | RockAlbums | NONE | NO | | Music | dbo | JazzAlbums | NONE | NO | | Music | dbo | BluesAlbums | NONE | NO | +-----------------+----------------+--------------+----------------+----------------+
Tôi cố tình bỏ qua một cột trong ví dụ này. Tôi đã bỏ qua VIEW_DEFINITION
cột. Tôi đã bỏ nó ra vì nó làm rối đầu ra khi sử dụng công cụ dòng lệnh của tôi. Bạn có thể xem một ví dụ bao gồm cột này bên dưới.
Lưu ý rằng tài liệu của Microsoft cảnh báo rằng bạn không nên sử dụng INFORMATION_SCHEMA
các khung nhìn để xác định lược đồ của một đối tượng. Cách đáng tin cậy duy nhất để tìm giản đồ của một đối tượng là truy vấn sys.objects
xem danh mục.
Ví dụ 2 - Trả lại Thông tin về Chế độ xem Cụ thể
Dưới đây là một ví dụ về việc trả lại thông tin về một chế độ xem cụ thể.
SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, CHECK_OPTION, IS_UPDATABLE FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Kết quả:
+-----------------+----------------+--------------+----------------+----------------+ | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | CHECK_OPTION | IS_UPDATABLE | |-----------------+----------------+--------------+----------------+----------------| | Music | dbo | RockAlbums | NONE | NO | +-----------------+----------------+--------------+----------------+----------------+
Đây là một lần nữa với VIEW_DEFINITION
cột bao gồm:
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Kết quả:
+-----------------+----------------+--------------+-------------------+----------------+----------------+ | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | VIEW_DEFINITION | CHECK_OPTION | IS_UPDATABLE | |-----------------+----------------+--------------+-------------------+----------------+----------------| | Music | dbo | RockAlbums | CREATE VIEW RockAlbums AS SELECT AlbumName, ArtistName FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId INNER JOIN Genres ON Albums.GenreId = Genres.GenreId WHERE Genres.Genre = 'Rock'; | NONE | NO | +-----------------+----------------+--------------+-------------------+----------------+----------------+
Ví dụ 3 - Chỉ trả lại Định nghĩa Chế độ xem
Bất chấp nhược điểm của định nghĩa chế độ xem làm rối bố cục của tôi, cột này có thể hữu ích nếu bạn chỉ đang tìm kiếm định nghĩa chế độ xem:
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Kết quả:
+-------------------+ | VIEW_DEFINITION | |-------------------| | CREATE VIEW RockAlbums AS SELECT AlbumName, ArtistName FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId INNER JOIN Genres ON Albums.GenreId = Genres.GenreId WHERE Genres.Genre = 'Rock'; | +-------------------+
Ví dụ 4 - Trả lại Định nghĩa Chế độ xem của Nhiều Chế độ xem
VIEW_DEFINITION
cột có thể rất hữu ích nếu muốn liệt kê các định nghĩa chế độ xem cho nhiều chế độ xem cùng một lúc:
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Kết quả:
+-------------------+ | VIEW_DEFINITION | |-------------------| | CREATE VIEW RockAlbums AS SELECT AlbumName, ArtistName FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId INNER JOIN Genres ON Albums.GenreId = Genres.GenreId WHERE Genres.Genre = 'Rock'; | | CREATE VIEW JazzAlbums AS SELECT AlbumName, ArtistName FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId INNER JOIN Genres ON Albums.GenreId = Genres.GenreId WHERE Genres.Genre = 'Jazz'; | | CREATE VIEW BluesAlbums AS SELECT AlbumName, ArtistName FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId INNER JOIN Genres ON Albums.GenreId = Genres.GenreId WHERE Genres.Genre = 'Blues'; | +-------------------+ (3 rows affected)
Ví dụ 5 - Trả lại Định nghĩa Chế độ xem Lớn
VIEW_DEFINITION
cột có độ dài tối đa là nvarchar (4000) . Đối với các định nghĩa chế độ xem lớn hơn mức này, bạn có thể sử dụng OBJECT_DEFINITION()
hàm (cùng với OBJECT_ID()
hàm) để trả về định nghĩa đầy đủ.
Giá trị trả về của OBJECT_DEFINITION()
hàm là nvarchar (max) , vì vậy nó không có giới hạn ký tự của VIEW_DEFINITION
(như đã đề cập, là nvarchar (4000) ).
Ví dụ:
SELECT OBJECT_DEFINITION(OBJECT_ID(TABLE_NAME)) FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Kết quả:
+--------------------+ | (No column name) | |--------------------| | CREATE VIEW RockAlbums AS SELECT AlbumName, ArtistName FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId INNER JOIN Genres ON Albums.GenreId = Genres.GenreId WHERE Genres.Genre = 'Rock'; | +--------------------+
Rõ ràng, ví dụ này không cho thấy lợi ích của việc sử dụng OBJECT_DEFINITION()
, vì định nghĩa chế độ xem quá nhỏ, nhưng nếu bạn có định nghĩa chế độ xem cực lớn, hy vọng ví dụ này sẽ hữu ích.