sql >> Base de Datos >  >> RDS >> Sqlserver

4 formas de enumerar todas las vistas en una base de datos de SQL Server

Este artículo presenta cuatro formas de devolver una lista de vistas definidas por el usuario en una base de datos de SQL Server.

Si desea ver solo vistas del sistema, o ambas definidas por el usuario y vistas del sistema, consulte Diferencia entre sys.views, sys.system_views y sys.all_views en SQL Server.

Opción 1:la vista de esquema de información de VIEWS

Puedes usar las VIEWS vista de esquema de información para obtener una lista de todas las vistas definidas por el usuario en una base de datos.

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

Resultado:

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

Devolver la definición de la vista

El INFORMATION_SCHEMA.VIEWS la vista también tiene una VIEW_DEFINITION columna, por lo que puede devolver fácilmente la definición de cada vista si es necesario.

SELECT VIEW_DEFINITION
FROM INFORMATION_SCHEMA.VIEWS;

Opción 2:la vista de catálogo del sistema sys.views

Otra forma de devolver una lista de vistas es consultar el sys.views vista del catálogo del sistema.

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

Resultado:

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

Devolver la definición de la vista

La sys.view view no incluye una columna para la definición del objeto. Si desea devolver la definición de cada vista, puede unirla con sys.sql_modules vista del sistema.

Ejemplo:

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

Opción 3:la vista del catálogo del sistema sys.objects

Otra forma de devolver una lista de vistas es consultar el sys.objects vista del catálogo del sistema.

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

Resultado:

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

El tipo V es para "Ver". Otra forma de hacer esto es filtrar por type_desc columna:

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

Devolver la definición de la vista

Los sys.objects view no incluye una columna para la definición del objeto. Si desea devolver la definición de cada vista, puede unirla con sys.sql_modules vista del sistema.

Ejemplo:

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

Opción 4:el procedimiento almacenado sp_tables

Las sp_tables El procedimiento almacenado devuelve una lista de objetos que se pueden consultar en el entorno actual. Esto incluye cualquier tabla o vista, excepto los objetos sinónimos.

Puede restringir los resultados a solo vistas con @table_type parámetro. También puede reducirlo a solo un propietario o catálogo determinado.

Ejecutar el siguiente código devolverá todas las vistas en la base de datos actual, incluidas las vistas del sistema.

EXEC sp_tables @table_type = "'VIEW'";

No presentaré los resultados aquí porque es una lista larga.

Aquí se reduce a un propietario de base de datos determinado:

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

Resultado:

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