sql >> Database teknologi >  >> RDS >> Sqlserver

Få visningsoplysninger med VIEWS Information Schema View i SQL Server

I SQL Server kan du bruge Transact-SQL VIEWS systeminformationsskemavisning for at returnere information om en eller flere visninger i den aktuelle database. Den returnerer én række for visninger, som den aktuelle bruger kan få adgang til i den aktuelle database.

For at bruge denne visning skal du angive det fuldt kvalificerede navn på INFORMATION_SCHEMA.VIEWS .

Eksempel 1 – Returner oplysninger om en specifik visning

Her er et eksempel på returnering af oplysninger om alle visninger, som den aktuelle bruger har adgang til i den aktuelle database.

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

Resultat:

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

Jeg har med vilje udeladt en kolonne i dette eksempel. Jeg har udeladt VIEW_DEFINITION kolonne. Jeg udelod det, fordi det ødelægger outputtet, når jeg bruger mit kommandolinjeværktøj. Du kan se et eksempel, der inkluderer denne kolonne nedenfor.

Bemærk, at Microsoft-dokumentationen advarer om, at du ikke bør bruge INFORMATION_SCHEMA visninger for at bestemme skemaet for et objekt. Den eneste pålidelige måde at finde skemaet for et objekt på er at forespørge sys.objects katalogvisning.

Eksempel 2 – Returner oplysninger om en specifik visning

Her er et eksempel på returnering af oplysninger om en bestemt visning.

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

Resultat:

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

Her er den igen med VIEW_DEFINITION kolonne inkluderet:

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

Resultat:

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

Eksempel 3 – Returner kun visningsdefinitionen

På trods af at visningsdefinitionens ulemper ødelægger mit layout, kan denne kolonne være nyttig, hvis du bare leder efter visningsdefinitionen:

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

Resultat:

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

Eksempel 4 – Returner visningsdefinitionerne for flere visninger

VIEW_DEFINITION kolonne kan være ekstra praktisk, hvis du ønsker at vise visningsdefinitionerne for flere visninger på én gang:

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

Resultat:

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

Eksempel 5 – Returnerer definitioner af store visninger

VIEW_DEFINITION kolonne har en maksimal længde på nvarchar(4000) . For visningsdefinitioner, der er større end dette, kan du bruge OBJECT_DEFINITION() funktion (sammen med OBJECT_ID() funktion) for at returnere den fulde definition.

Returværdien for OBJECT_DEFINITION() funktionen er nvarchar(max) , så den har ikke tegnbegrænsningen for VIEW_DEFINITION kolonne (der som nævnt er nvarchar(4000) ).

Eksempel:

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

Resultat:

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

Dette eksempel viser naturligvis ikke fordelen ved at bruge OBJECT_DEFINITION() funktion, fordi visningsdefinitionen er for lille, men hvis du har en ekstra stor visningsdefinition, hjælper dette eksempel forhåbentlig.


  1. Hekaton med et twist:In-memory TVPs – Del 2

  2. Oracle (Gamle?) Joins - Et værktøj/script til konvertering?

  3. 3 måder at formatere et tal til 2 decimaler i Oracle

  4. PostgreSQL-indeks bruges ikke til forespørgsel på IP-områder