sql >> Databasteknik >  >> RDS >> Sqlserver

Få Visa information med VIEWS Information Schema View i SQL Server

I SQL Server kan du använda Transact-SQL VIEWS systeminformationsschemavy för att returnera information om en eller flera vyer i den aktuella databasen. Den returnerar en rad för vyer som kan nås av den aktuella användaren i den aktuella databasen.

För att använda denna vy, ange det fullständiga namnet INFORMATION_SCHEMA.VIEWS .

Exempel 1 – Returnera information om en specifik vy

Här är ett exempel på att returnera information om alla vyer som den aktuella användaren har åtkomst till i den aktuella databasen.

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

Jag har avsiktligt utelämnat en kolumn i det här exemplet. Jag har utelämnat VIEW_DEFINITION kolumn. Jag utelämnade det eftersom det förstör utdata när jag använder mitt kommandoradsverktyg. Du kan se ett exempel som inkluderar denna kolumn nedan.

Observera att Microsofts dokumentation varnar för att du inte ska använda INFORMATION_SCHEMA vyer för att bestämma schemat för ett objekt. Det enda tillförlitliga sättet att hitta schemat för ett objekt är att fråga sys.objects katalogvy.

Exempel 2 – Returnera information om en specifik vy

Här är ett exempel på att returnera information om en specifik vy.

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

Här är den igen med VIEW_DEFINITION kolumn ingår:

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

Exempel 3 – Returnera bara vydefinitionen

Trots att nackdelen med att vydefinitionen förstör min layout, kan den här kolumnen vara praktisk om du bara letar efter vydefinitionen:

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

Exempel 4 – Returnera vydefinitionerna för flera vyer

VIEW_DEFINITION kolumnen kan vara extra praktisk om du vill lista vydefinitionerna för flera vyer samtidigt:

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)

Exempel 5 – Returnerar definitioner med stor vy

VIEW_DEFINITION kolumnen har en maximal längd på nvarchar(4000) . För vydefinitioner större än detta kan du använda OBJECT_DEFINITION() funktion (tillsammans med OBJECT_ID() funktion) för att returnera den fullständiga definitionen.

Returvärdet för OBJECT_DEFINITION() funktionen är nvarchar(max) , så den har inte teckenbegränsningen för VIEW_DEFINITION kolumn (som som nämnts är nvarchar(4000) ).

Exempel:

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

Uppenbarligen visar det här exemplet inte fördelen med att använda OBJECT_DEFINITION() funktion, eftersom vydefinitionen är för liten, men om du har en extra stor vydefinition hjälper förhoppningsvis detta exempel.


  1. Hur man begränsar rader i en SQL Server-resultatuppsättning

  2. SQL Server-kontrolltabell partitionerad

  3. ADO.net SqlTransaction förbättrar prestandan

  4. Felsökning av MySQL-replikering:del två