Enumere los objetos subyacentes utilizados en una función de SQL Server
-
26-09-2020 - |
Pregunta
Utilizo lo siguiente para obtener una lista de objetos subyacentes en una Vista:
SELECT view_name, Table_Name
FROM INFORMATION_SCHEMA.VIEW_TABLE_USAGE
WHERE View_Name IN
(
'View1', 'View2'
)
ORDER BY view_name, table_name
No pude encontrar ninguna tabla del sistema que proporcionara los objetos base en una función.¿Alguien tiene alguna idea de cómo obtener fácilmente esta información?Estoy tratando con muchas funciones con múltiples objetos de base de datos base y quiero evitar el esfuerzo manual para obtener esta información.¡Gracias!
Solución
sp_depends le dará una lista de objetos dependientes en todas las versiones actualesde SQL Server, pero se enumera como en desuso.
Aquí hay un artículo de MSDN con una forma de encontrar objetos que hacen referencia a los objetosUna función y con pequeñas modificaciones Puede obtener la lista de objetos a los que se hace referencia una función:
SELECT OBJECT_NAME(object_id) AS referencing_object_name
,COALESCE(COL_NAME(object_id, column_id), '(n/a)') AS referencing_column_name
,object_name(referenced_major_id) as referenced_object
,*
FROM sys.sql_dependencies
--WHERE referenced_major_id = OBJECT_ID('schema.objectname')
where object_id = object_id('schema.objectname')
ORDER BY OBJECT_NAME(object_id), COL_NAME(object_id, column_id);
Otros consejos
* Por favor lee *
Como se señaló en la respuesta anterior de @Spörri, sys.sql_dependencies
es obsoleto.
sys.sql_dependencies (Transact-SQL) :
Esta característica se eliminará en una versión futura de Microsoft SQL Server.Evite usar esta función en el nuevo trabajo de desarrollo y planee modificar las aplicaciones que actualmente usan esta función.Use SYS.SQL_EXPRESION_DEPENDENDES en su lugar.
Observé que entre 3 funciones, faltaba una identificación de objeto de función en la tabla obsoleta sys.sql_dependencies
, y encontré todo en el sys.sql_expression_dependencies
mesa en su lugar.Utilice lo siguiente para obtener las dependencias:
select *
from sys.sql_expression_dependencies
where referencing_id = object_id('schema.object_name')