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()を使用する利点を示していません ビュー定義が小さすぎるため、関数ですが、ビュー定義が非常に大きい場合は、この例が役立つことを願っています。