In SQL Server können Sie die Transact-SQL VIEWS verwenden system information schema view, um Informationen zu einer oder mehreren Ansichten in der aktuellen Datenbank zurückzugeben. Es gibt eine Zeile für Ansichten zurück, auf die der aktuelle Benutzer in der aktuellen Datenbank zugreifen kann.
Um diese Ansicht zu verwenden, geben Sie den vollständig qualifizierten Namen INFORMATION_SCHEMA.VIEWS an .
Beispiel 1 – Informationen zu einer bestimmten Ansicht zurückgeben
Hier ist ein Beispiel für die Rückgabe von Informationen zu allen Ansichten, auf die der aktuelle Benutzer in der aktuellen Datenbank Zugriff hat.
SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, CHECK_OPTION, IS_UPDATABLE FROM INFORMATION_SCHEMA.VIEWS;
Ergebnis:
+-----------------+----------------+--------------+----------------+----------------+ | 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 | +-----------------+----------------+--------------+----------------+----------------+
Ich habe in diesem Beispiel absichtlich eine Spalte weggelassen. Ich habe die VIEW_DEFINITION weggelassen Säule. Ich habe es weggelassen, weil es die Ausgabe durcheinander bringt, wenn ich mein Befehlszeilentool verwende. Unten sehen Sie ein Beispiel, das diese Spalte enthält.
Beachten Sie, dass die Microsoft-Dokumentation davor warnt, INFORMATION_SCHEMA zu verwenden Ansichten, um das Schema eines Objekts zu bestimmen. Der einzig zuverlässige Weg, das Schema eines Objekts zu finden, ist die Abfrage von sys.objects Katalogansicht.
Beispiel 2 – Informationen zu einer bestimmten Ansicht zurückgeben
Hier ist ein Beispiel für die Rückgabe von Informationen zu einer bestimmten Ansicht.
SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, CHECK_OPTION, IS_UPDATABLE FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Ergebnis:
+-----------------+----------------+--------------+----------------+----------------+ | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | CHECK_OPTION | IS_UPDATABLE | |-----------------+----------------+--------------+----------------+----------------| | Music | dbo | RockAlbums | NONE | NO | +-----------------+----------------+--------------+----------------+----------------+
Hier ist es wieder mit der VIEW_DEFINITION Spalte enthalten:
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Ergebnis:
+-----------------+----------------+--------------+-------------------+----------------+----------------+
| 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 |
+-----------------+----------------+--------------+-------------------+----------------+----------------+
Beispiel 3 – Nur die Ansichtsdefinition zurückgeben
Trotz der Kehrseite der Ansichtsdefinition, die mein Layout durcheinander bringt, kann diese Spalte nützlich sein, wenn Sie nur nach der Ansichtsdefinition suchen:
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Ergebnis:
+-------------------+
| 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'; |
+-------------------+
Beispiel 4 – Zurückgeben der Ansichtsdefinitionen mehrerer Ansichten
Die VIEW_DEFINITION Spalte kann besonders praktisch sein, wenn Sie die Ansichtsdefinitionen für mehrere Ansichten gleichzeitig auflisten möchten:
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Ergebnis:
+-------------------+
| 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)
Beispiel 5 – Zurückgeben von Definitionen für große Ansichten
Die VIEW_DEFINITION Spalte hat eine maximale Länge von nvarchar(4000) . Für größere Ansichtsdefinitionen können Sie OBJECT_DEFINITION() verwenden Funktion (zusammen mit der OBJECT_ID() Funktion), um die vollständige Definition zurückzugeben.
Der Rückgabewert von OBJECT_DEFINITION() Funktion ist nvarchar(max) , hat also nicht die Zeichenbeschränkung der VIEW_DEFINITION Spalte (die wie erwähnt nvarchar(4000) ist). ).
Beispiel:
SELECT OBJECT_DEFINITION(OBJECT_ID(TABLE_NAME)) FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Ergebnis:
+--------------------+
| (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'; |
+--------------------+
Offensichtlich zeigt dieses Beispiel nicht den Vorteil der Verwendung von OBJECT_DEFINITION() Funktion, da die Ansichtsdefinition zu klein ist, aber wenn Sie eine extra große Ansichtsdefinition haben, hilft dieses Beispiel hoffentlich weiter.