Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Abrufen von Ansichtsinformationen mit der VIEWS-Informationsschemaansicht in SQL Server

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.