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

4 måder at liste alle visninger i en SQL Server-database

Denne artikel præsenterer fire måder at returnere en liste over brugerdefinerede visninger i en SQL Server-database.

Hvis du kun vil se systemvisninger eller både brugerdefinerede og systemvisninger, se forskellen mellem sys.views, sys.system_views og sys.all_views i SQL Server.

Mulighed 1 – VIEWS-informationsskemavisningen

Du kan bruge VIEWS informationsskemavisning for at få en liste over alle brugerdefinerede visninger i en database.

USE Music;
SELECT 
  TABLE_SCHEMA,
  TABLE_NAME
FROM INFORMATION_SCHEMA.VIEWS;

Resultat:

+----------------+--------------+
| TABLE_SCHEMA   | TABLE_NAME   |
|----------------+--------------|
| dbo            | RockAlbums   |
| dbo            | JazzAlbums   |
| dbo            | BluesAlbums  |
+----------------+--------------+

Returnér visningens definition

INFORMATION_SCHEMA.VIEWS visningen har også en VIEW_DEFINITION kolonne, så du nemt kan returnere hver visnings definition, hvis det kræves.

SELECT VIEW_DEFINITION
FROM INFORMATION_SCHEMA.VIEWS;

Mulighed 2 – Sys.views systemkatalogvisning

En anden måde at returnere en liste over visninger på er at forespørge på sys.views systemkatalogvisning.

USE Music;
SELECT 
  SCHEMA_NAME(schema_id) AS [Schema],
  Name
FROM sys.views;

Resultat:

+----------+-------------+
| Schema   | Name        |
|----------+-------------|
| dbo      | RockAlbums  |
| dbo      | JazzAlbums  |
| dbo      | BluesAlbums |
+----------+-------------+

Returnér visningens definition

sys.view visningen inkluderer ikke en kolonne til objektets definition. Hvis du vil returnere hver visnings definition, kan du tilslutte den med sys.sql_modules systemvisning.

Eksempel:

SELECT definition
FROM sys.views v
INNER JOIN sys.sql_modules m 
ON v.object_id = m.object_id;

Mulighed 3 – Sys.objects systemkatalogvisning

En anden måde at returnere en liste over visninger på er at forespørge på sys.objects systemkatalogvisning.

SELECT 
  SCHEMA_NAME(schema_id) AS [Schema],
  name
FROM sys.objects
WHERE type = 'V';

Resultat:

+----------+-------------+
| Schema   | name        |
|----------+-------------|
| dbo      | RockAlbums  |
| dbo      | JazzAlbums  |
| dbo      | BluesAlbums |
+----------+-------------+

Typen V er for "View". En anden måde at gøre dette på er at filtrere efter type_desc kolonne:

SELECT 
  SCHEMA_NAME(schema_id) AS [Schema],
  name
FROM sys.objects
WHERE type_desc = 'VIEW';

Returnér visningens definition

sys.objects visningen inkluderer ikke en kolonne til objektets definition. Hvis du vil returnere hver visnings definition, kan du tilslutte den med sys.sql_modules systemvisning.

Eksempel:

SELECT definition
FROM sys.objects o
INNER JOIN sys.sql_modules m 
ON o.object_id = m.object_id
WHERE type = 'V';

Mulighed 4 – Sp_tables Stored Procedure

sp_tables lagret procedure returnerer en liste over objekter, der kan forespørges i det aktuelle miljø. Dette inkluderer enhver tabel eller visning, undtagen synonymobjekter.

Du kan indsnævre resultaterne til kun visninger med @table_type parameter. Du kan også indsnævre det til kun en given ejer eller katalog.

Udførelse af følgende kode vil returnere alle visninger i den aktuelle database – inklusive systemvisninger.

EXEC sp_tables @table_type = "'VIEW'";

Jeg vil ikke præsentere resultaterne her, fordi det er en lang liste.

Her er det indsnævret til en given databaseejer:

EXEC sp_tables 
  @table_owner = 'dbo',
  @table_type = "'VIEW'";

Resultat:

+-------------------+---------------+--------------+--------------+-----------+
| TABLE_QUALIFIER   | TABLE_OWNER   | TABLE_NAME   | TABLE_TYPE   | REMARKS   |
|-------------------+---------------+--------------+--------------+-----------|
| Music             | dbo           | BluesAlbums  | VIEW         | NULL      |
| Music             | dbo           | JazzAlbums   | VIEW         | NULL      |
| Music             | dbo           | RockAlbums   | VIEW         | NULL      |
+-------------------+---------------+--------------+--------------+-----------+

  1. Android:Bulk Insert, når InsertHelper er forældet

  2. Flere indekser vs Multi-kolonne indekser

  3. konverter MySQL SET datatype til Postgres

  4. Hvad er "rowversion" i SQL Server?