sql >> Database >  >> RDS >> Sqlserver

Bekijk informatie met de VIEWS Information Schema View in SQL Server

In SQL Server kunt u de Transact-SQL VIEWS systeeminformatieschemaweergave om informatie over een of meer weergaven in de huidige database te retourneren. Het retourneert één rij voor weergaven die toegankelijk zijn voor de huidige gebruiker in de huidige database.

Om deze weergave te gebruiken, specificeert u de volledig gekwalificeerde naam van INFORMATION_SCHEMA.VIEWS .

Voorbeeld 1 – Informatie over een specifieke weergave retourneren

Hier is een voorbeeld van het retourneren van informatie over alle weergaven waartoe de huidige gebruiker toegang heeft in de huidige database.

SELECT 
  TABLE_CATALOG,
  TABLE_SCHEMA,
  TABLE_NAME,
  CHECK_OPTION,
  IS_UPDATABLE
FROM INFORMATION_SCHEMA.VIEWS;

Resultaat:

+-----------------+----------------+--------------+----------------+----------------+
| 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             |
+-----------------+----------------+--------------+----------------+----------------+

In dit voorbeeld heb ik bewust een kolom weggelaten. Ik heb de VIEW_DEFINITION . weggelaten kolom. Ik heb het weggelaten omdat het de uitvoer verknoeit bij het gebruik van mijn opdrachtregelprogramma. Hieronder ziet u een voorbeeld waarin deze kolom is opgenomen.

Merk op dat de Microsoft-documentatie waarschuwt dat u de INFORMATION_SCHEMA . niet moet gebruiken weergaven om het schema van een object te bepalen. De enige betrouwbare manier om het schema van een object te vinden, is door de sys.objects . op te vragen catalogusweergave.

Voorbeeld 2 – Informatie over een specifieke weergave retourneren

Hier is een voorbeeld van het retourneren van informatie over een specifieke weergave.

SELECT 
  TABLE_CATALOG,
  TABLE_SCHEMA,
  TABLE_NAME,
  CHECK_OPTION,
  IS_UPDATABLE
FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_NAME = 'RockAlbums';

Resultaat:

+-----------------+----------------+--------------+----------------+----------------+
| TABLE_CATALOG   | TABLE_SCHEMA   | TABLE_NAME   | CHECK_OPTION   | IS_UPDATABLE   |
|-----------------+----------------+--------------+----------------+----------------|
| Music           | dbo            | RockAlbums   | NONE           | NO             |
+-----------------+----------------+--------------+----------------+----------------+

Hier is het weer met de VIEW_DEFINITION kolom inbegrepen:

SELECT * 
FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_NAME = 'RockAlbums';

Resultaat:

+-----------------+----------------+--------------+-------------------+----------------+----------------+
| 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             |
+-----------------+----------------+--------------+-------------------+----------------+----------------+

Voorbeeld 3 – Geef alleen de weergavedefinitie terug

Ondanks het nadeel van de weergavedefinitie die mijn lay-out in de war brengt, kan deze kolom van pas komen als je alleen op zoek bent naar de weergavedefinitie:

SELECT VIEW_DEFINITION 
FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_NAME = 'RockAlbums';

Resultaat:

+-------------------+
| 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';                   |
+-------------------+

Voorbeeld 4 – Geef de weergavedefinities van meerdere weergaven terug

De VIEW_DEFINITION kolom kan extra handig zijn als u de weergavedefinities voor meerdere weergaven tegelijk wilt weergeven:

SELECT VIEW_DEFINITION 
FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_NAME = 'RockAlbums';

Resultaat:

+-------------------+
| 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)

Voorbeeld 5 – Grote weergavedefinities retourneren

De VIEW_DEFINITION kolom heeft een maximale lengte van nvarchar(4000) . Voor grotere weergavedefinities kunt u de OBJECT_DEFINITION() gebruiken functie (samen met de OBJECT_ID() functie) om de volledige definitie terug te geven.

De geretourneerde waarde van OBJECT_DEFINITION() functie is nvarchar(max) , dus het heeft niet de tekenbeperking van de VIEW_DEFINITION kolom (die, zoals vermeld, nvarchar(4000) is ).

Voorbeeld:

SELECT 
  OBJECT_DEFINITION(OBJECT_ID(TABLE_NAME))
FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_NAME = 'RockAlbums';

Resultaat:

+--------------------+
| (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';                    |
+--------------------+

Het is duidelijk dat dit voorbeeld niet het voordeel laat zien van het gebruik van de OBJECT_DEFINITION() functie, omdat de weergavedefinitie te klein is, maar als je een extra grote weergavedefinitie hebt, helpt dit voorbeeld hopelijk.


  1. In PostgreSQL, hoe gegevens in te voegen met de opdracht COPY?

  2. Het Microsoft Office-product dat weigert te sterven

  3. Migreren van traditionele replicatie naar GTID

  4. Hoe maak je een SQL Server-functie om meerdere rijen van een subquery samen te voegen in een enkel gescheiden veld?