¿Existe alguna manera de que pueda averiguar qué tablas base están utilizando las vistas mediante una consulta personalizada o un procedimiento almacenado?¿Cómo puedo verificar las dependencias 'vistas' del servidor sql?
Respuesta
Si esto es algo que harás a menudo Red Gate SQL Dependency Tracker (no, yo no trabajo para ellos) es una gran herramienta. Creo que tienen un período de prueba si quieres probarlo.
Aquí hay una buena explicación:
https://web.archive.org/web/1/http://blogs.techrepublic%2ecom%2ecom/datacenter/?p=277
no obtengo ningún resultado cuando creo y ejecuto esa sp –
Usted puede utilizar la vista sql_dependencies:
select OBJECT_NAME(referenced_major_id) as DependantObject
from sys.sql_dependencies
where object_id = object_id('YourViewName')
Para recuperar de forma recursiva dependencias (Fe, si se selecciona desde un punto de vista, esto sería encontrar las tablas que las otras referencias de vista):
with deps (child, parent) as (
select d.object_id, d.referenced_major_id
from sys.sql_dependencies d
where d.object_id = object_id('YourViewName')
union all
select d.object_id, d.referenced_major_id
from sys.sql_dependencies d
inner join deps on deps.parent = d.object_id
)
select OBJECT_NAME(parent)
from deps
Este método no es infalible. Por ejemplo, si cambia el nombre de un objeto utilizando sp_rename, sus dependencias no se actualizan.
no obtengo ningún resultado cuando ejecuto este –
Funciona bien en mi máquina. ¿Tal vez podría publicar la definición de la vista? – Andomar
sí funciona solo para las vistas que he creado, pero para otras vistas creadas por otros desarrolladores (a las que tengo acceso) obtengo 0 registros. –
Usted podría utilizar los sys.dm_sql_referenced_entities función para encontrar objetos referenciados por una vista especificada:
SELECT DISTINCT
referenced_schema_name ,
referenced_entity_name
FROM sys.dm_sql_referenced_entities ('Sales.vSalesPersonSalesByFiscalYears', 'OBJECT');
Además, no es la vista del sistema sys.sql_expression_dependencies donde se puede especificar un nombre de tabla y un tipo de objeto de referencia:
SELECT
referencing_object_name = o.name,
referencing_object_type_desc = o.type_desc
FROM sys.sql_expression_dependencies se
INNER JOIN sys.objects o
ON se.referencing_id = o.[object_id]
WHERE referenced_entity_name = 'Person' AND o.type_desc = 'View'
Para evitar el trabajo "manual" también puede usar ApexSQL Clean, una herramienta de SQL Server que puede encontrar todas las dependencias internas y externas. En el panel Resultados de seleccionar un objeto y ver todos los objetos que dependen del objeto seleccionado, y objetos en los que el objeto seleccionado depende de:
También puede filtrar objetos y visualizar dependencias:
responsabilidad: yo trabajo para ApexSQL como ingeniero de soporte
Espero que esto ayude
Usted puede hacer que el uso de sys.sql_expression_dependencies en SQL Server> = 2008 (R1 +)
Nota: Esto tomará 30 segundos o más.
Si sólo desealos puntos de vista, eliminar las funciones con valores de tabla escalar + ('FN' y 'SI').
Una función con valores de tabla puede ser una dependencia de una vista y viceversa, más la vista/tvf puede depender de funciones escalares.
;WITH TFV_Dependencies AS
(
SELECT
--OBJECT_SCHEMA_NAME(sysdep.referencing_id) AS Referencing_Schema
ReferencingO.object_id AS ReferencingObject_Id
,sysschema.name AS Referencing_Schema
,ReferencingO.name AS Referencing_Object_Name
,sysdep.referenced_schema_name AS Referenced_Schema
,sysdep.referenced_entity_name AS Referenced_Object_Name
--,ReferencingO.type
,ReferencedO.name AS RefName
--,ReferencedO.type AS RefType
FROM sys.objects as ReferencingO
LEFT JOIN sys.schemas AS sysschema
ON sysschema.schema_id = ReferencingO.schema_id
LEFT JOIN sys.sql_expression_dependencies AS sysdep
LEFT JOIN sys.objects as ReferencedO
ON ReferencedO.name = sysdep.referenced_entity_name
ON sysdep.referencing_id = ReferencingO.object_id
AND ReferencingO.name <> sysdep.referenced_entity_name
--AND ReferencedO.type <> 'U'
AND ReferencedO.type IN ('IF', 'FN', 'V')
WHERE (1=1)
--AND ReferencingO.type NOT IN ('PK','F','UQ','SQ','D','IT', 'S')
--AND ReferencingO.type IN ('U', 'V', 'FN', 'IF', 'P')
AND ReferencingO.type IN ('IF', 'FN', 'V')
AND ReferencingO.name NOT IN
(
'dt_adduserobject'
,'dt_droppropertiesbyid'
,'dt_dropuserobjectbyid'
,'dt_generateansiname'
,'dt_getobjwithprop'
,'dt_getobjwithprop_u'
,'dt_getpropertiesbyid'
,'dt_getpropertiesbyid_u'
,'dt_setpropertybyid'
,'dt_setpropertybyid_u'
,'dt_verstamp006'
,'dt_verstamp007'
,'sp_helpdiagrams'
,'sp_creatediagram'
,'sp_alterdiagram'
,'sp_renamediagram'
,'sp_dropdiagram'
,'sp_helpdiagramdefinition'
,'fn_diagramobjects'
)
)
,DependencyGroup AS
(
-- base case
SELECT
ReferencingObject_Id AS ObjectId
,Referencing_Object_Name AS ObjectName
,Referencing_Schema AS ObjectSchema
,1 AS Lvl
FROM TFV_Dependencies
WHERE 1=1
AND Referenced_Object_Name IS NULL
-- recursive case
UNION ALL
SELECT
d.ReferencingObject_Id AS ObjectId
,d.Referencing_Object_Name AS ObjectName
,d.Referencing_Schema AS ObjectSchema
,r.Lvl + 1 AS Lvl
FROM TFV_Dependencies AS d
INNER JOIN DependencyGroup AS r
ON r.ObjectName = d.Referenced_Object_Name
)
,
CTE AS
(
SELECT TOP 999999999999999999
MAX(Lvl) AS Lvl
,ObjectId
,ObjectSchema
,ObjectName
--,'DELETE FROM [' + REPLACE(ObjectName, '''', '''''') + ']; ' AS DeleteCmd
FROM DependencyGroup
GROUP BY ObjectId, ObjectSchema, ObjectName
)
SELECT
CTE.Lvl
,CTE.ObjectSchema AS SPECIFIC_SCHEMA
,CTE.ObjectName AS SPECIFIC_NAME
,sysSqlModules.definition AS ROUTINE_DEFINITION
FROM CTE
LEFT JOIN sys.sql_modules AS sysSqlModules
ON sysSqlModules.object_id = CTE.ObjectId
ORDER BY Lvl, ObjectSchema, ObjectName
OPTION (MAXRECURSION 0)
- 1. Dependencias del Servidor SQL
- 2. Vistas del servidor SQL, bendición o maldición?
- 3. Servidor SQL: ver todas las dependencias de la clave externa
- 4. Cómo verificar las dependencias de los flotadores
- 5. ¿Cómo identifico vistas con dependencias rotas en SQL Server?
- 6. cómo puedo optimizar las vistas en el servidor sql para la velocidad
- 7. Primer código EF y vistas del servidor SQL
- 8. ¿Cómo puedo gestionar las dependencias del módulo Perl?
- 9. Vistas de anidamiento del servidor cuadrado 2008
- 10. ¿Cómo construir un proyecto de C# sin verificar las dependencias?
- 11. ¿Cómo se enumeran todas las vistas indizadas en SQL Server?
- 12. ¿Cómo verificar si existe una restricción en el servidor Sql?
- 13. ¿Cómo rastrear las dependencias del sistema?
- 14. ¿Cómo puedo usar Selenium RC para verificar nuestros Redireccionamientos del lado del servidor (301, 302)?
- 15. ¿Cómo puedo introspectar en un servidor SQL?
- 16. Creación de vistas de solo lectura en el servidor Sql
- 17. Eliminar todas las vistas desde SQL Server
- 18. ¿Cómo puedo reutilizar las configuraciones del servidor en nginx?
- 19. uso del servidor SQL columna
- 20. ¿Cómo puedo verificar si una cadena de servidor Sql es nula o está vacía?
- 21. Índice filtrados del servidor SQL
- 22. ¿Cómo puedo gestionar las dependencias de compilación OSGi?
- 23. Evolución del esquema del servidor SQL (migraciones)
- 24. Cómo verificar el estado del servidor PostgreSQL Mac OS X
- 25. ¿Cómo puedo verificar si el servidor puede manejar solicitudes SOAP?
- 26. ¿Puedo eliminar dependencias ANTLR del código generado?
- 27. ¿Cómo consulto las vistas enlazadas al esquema?
- 28. Tabla temporal del servidor Sql
- 29. ¿Cómo puedo verificar el registro duplicado en SQL Server?
- 30. ¿Pueden las consultas del servidor sql realmente cancelarse/anularse?
Esto no tiene nada que ver con .net, solo servidor SQL. La etiqueta es un poco engañosa :) – DaveBoltman