SQL Serverでは、Transact-SQLのVIEWS
を使用できます。 現在のデータベース内の1つ以上のビューに関する情報を返すシステム情報スキーマビュー。現在のデータベースの現在のユーザーがアクセスできるビューに対して1行を返します。
このビューを使用するには、INFORMATION_SCHEMA.VIEWS
の完全修飾名を指定します 。
例1-特定のビューに関する情報を返す
これは、現在のユーザーが現在のデータベースでアクセスできるすべてのビューに関する情報を返す例です。
SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, CHECK_OPTION, IS_UPDATABLE FROM INFORMATION_SCHEMA.VIEWS;
結果:
+-----------------+----------------+--------------+----------------+----------------+ | 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 | +-----------------+----------------+--------------+----------------+----------------+
この例では、意図的に列を省略しています。 VIEW_DEFINITION
を省略しました 桁。コマンドラインツールを使用すると出力が台無しになるため、省略しました。以下にこの列を含む例を示します。
Microsoftのドキュメントでは、INFORMATION_SCHEMA
を使用しないように警告されていることに注意してください。 オブジェクトのスキーマを決定するためのビュー。オブジェクトのスキーマを見つける唯一の信頼できる方法は、sys.objects
にクエリを実行することです。 カタログビュー。
例2–特定のビューに関する情報を返す
特定のビューに関する情報を返す例を次に示します。
SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, CHECK_OPTION, IS_UPDATABLE FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
結果:
+-----------------+----------------+--------------+----------------+----------------+ | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | CHECK_OPTION | IS_UPDATABLE | |-----------------+----------------+--------------+----------------+----------------| | Music | dbo | RockAlbums | NONE | NO | +-----------------+----------------+--------------+----------------+----------------+
ここでもVIEW_DEFINITION
を使用しています 含まれる列:
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
結果:
+-----------------+----------------+--------------+-------------------+----------------+----------------+ | 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 | +-----------------+----------------+--------------+-------------------+----------------+----------------+
例3–ビュー定義のみを返す
ビュー定義の欠点が私のレイアウトを台無しにしているにもかかわらず、この列は、ビュー定義を探しているだけの場合に役立ちます。
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
結果:
+-------------------+ | 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'; | +-------------------+
例4–複数のビューのビュー定義を返す
VIEW_DEFINITION
複数のビューのビュー定義を一度に一覧表示する場合は、列が非常に便利です。
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
結果:
+-------------------+ | 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)
例5–大きなビュー定義を返す
VIEW_DEFINITION
列の最大長はnvarchar(4000) 。これより大きいビュー定義の場合は、OBJECT_DEFINITION()
を使用できます。 関数(OBJECT_ID()
と一緒に 関数)完全な定義を返します。
OBJECT_DEFINITION()
の戻り値 関数はnvarchar(max)です 、したがって、VIEW_DEFINITION
の文字制限はありません 列(前述のとおり、 nvarchar(4000) 。
例:
SELECT OBJECT_DEFINITION(OBJECT_ID(TABLE_NAME)) FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
結果:
+--------------------+ | (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'; | +--------------------+
明らかに、この例はOBJECT_DEFINITION()
を使用する利点を示していません ビュー定義が小さすぎるため、関数ですが、ビュー定義が非常に大きい場合は、この例が役立つことを願っています。