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.