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

Nhận thông tin dạng xem với dạng xem lược đồ thông tin VIEWS trong SQL Server

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giao dịch ngoại lệ ném ngoại lệ nền tảng này không hỗ trợ các giao dịch phân tán trong khi mở đối tượng kết nối

  2. Từ khoá Không được Hỗ trợ:Siêu dữ liệu

  3. Tạo bảng bằng nén trong SQL Server (T-SQL)

  4. Sửa lỗi Msg 8116 “Kiểu dữ liệu đối số varchar không hợp lệ cho đối số 1 của hàm session_context” trong SQL Server

  5. Tương đương với bigint trong C # là gì?