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.