sql >> Databáze >  >> RDS >> Sqlserver

Získejte informace o zobrazení pomocí zobrazení informačního schématu VIEWS na serveru SQL Server

Na serveru SQL Server můžete použít VIEWS Transact-SQL zobrazení schématu systémových informací pro vrácení informací o jednom nebo více pohledech v aktuální databázi. Vrátí jeden řádek pro pohledy, ke kterým má aktuální uživatel v aktuální databázi přístup.

Chcete-li použít toto zobrazení, zadejte plně kvalifikovaný název INFORMATION_SCHEMA.VIEWS .

Příklad 1 – Vrácení informací o konkrétním zobrazení

Zde je příklad vrácení informací o všech pohledech, ke kterým má aktuální uživatel přístup v aktuální databázi.

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

Výsledek:

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

Záměrně jsem v tomto příkladu vynechal sloupec. Vynechal jsem VIEW_DEFINITION sloupec. Vynechal jsem to, protože to kazí výstup při použití mého nástroje příkazového řádku. Níže můžete vidět příklad, který obsahuje tento sloupec.

Všimněte si, že dokumentace společnosti Microsoft varuje, že byste neměli používat INFORMATION_SCHEMA pohledy k určení schématu objektu. Jediný spolehlivý způsob, jak najít schéma objektu, je dotaz na sys.objects zobrazení katalogu.

Příklad 2 – Vrácení informací o konkrétním zobrazení

Zde je příklad vrácení informací o konkrétním výběru dat.

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

Výsledek:

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

Tady je to znovu s VIEW_DEFINITION zahrnutý sloupec:

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

Výsledek:

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

Příklad 3 – Vraťte pouze definici pohledu

Navzdory nevýhodám definice pohledu, která mi kazí rozvržení, se tento sloupec může hodit, pokud právě hledáte definici pohledu:

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

Výsledek:

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

Příklad 4 – Vrácení definic zobrazení více zobrazení

VIEW_DEFINITION sloupec může být velmi užitečný, pokud chcete vypsat definice zobrazení pro více zobrazení najednou:

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

Výsledek:

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

Příklad 5 – Vrácení definic velkého zobrazení

VIEW_DEFINITION sloupec má maximální délku nvarchar(4000) . Pro větší definice zobrazení můžete použít OBJECT_DEFINITION() funkce (spolu s OBJECT_ID() funkce) vrátíte úplnou definici.

Vrácená hodnota OBJECT_DEFINITION() funkce je nvarchar(max) , takže nemá omezení počtu znaků podle VIEW_DEFINITION sloupec (jak již bylo zmíněno, je nvarchar(4000) ).

Příklad:

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

Výsledek:

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

Je zřejmé, že tento příklad neukazuje výhodu použití OBJECT_DEFINITION() protože definice pohledu je příliš malá, ale pokud máte extra velkou definici pohledu, doufejme, že tento příklad pomůže.


  1. Jak spočítat počet řádků v tabulce v SQL

  2. Jak nastavit hodnotu bool v SQL

  3. Jak předám seznam jako parametr v uložené proceduře?

  4. Jak mohu ukládat a získávat obrázky z databáze MySQL pomocí PHP?