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