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