Liste os objetos subjacentes usados em uma função do SQL Server
-
26-09-2020 - |
Pergunta
Eu uso o seguinte para obter uma lista de objetos subjacentes em uma visualização:
SELECT view_name, Table_Name
FROM INFORMATION_SCHEMA.VIEW_TABLE_USAGE
WHERE View_Name IN
(
'View1', 'View2'
)
ORDER BY view_name, table_name
Não consegui encontrar nenhuma tabela de sistema que fornecesse os objetos base em uma função.Alguém tem alguma idéia de como extrair facilmente essas informações?Estou lidando com muitas funções com vários objetos de banco de dados base e quero evitar esforço manual para obter essas informações.Obrigado!
Solução
sp_depende fornecerá uma lista de objetos dependentes em todas as versões atuais do SQL Server, mas está listado como obsoleto.
Aqui está um artigo do MSDN com uma forma de encontrar objetos referenciando uma função e com pequenas modificações você pode obter a lista de objetos referenciados por uma função:
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);
Outras dicas
* Por favor leia *
Conforme observado na resposta do @Spörri acima, sys.sql_dependencies
está obsoleto.
sys.sql_dependencies (Transact-SQL) :
Esse recurso será removido em uma versão futura do Microsoft SQL Server.Evite utilizar esta funcionalidade em novos trabalhos de desenvolvimento e planeje modificar as aplicações que utilizam actualmente esta funcionalidade.Utilização sys.sql_expression_dependencies em vez disso.
Observei entre 3 funções, um ID de objeto funcional estava faltando na tabela obsoleta sys.sql_dependencies
, e encontrei tudo no sys.sql_expression_dependencies
mesa em vez disso.Então use o abaixo para obter as dependências:
select *
from sys.sql_expression_dependencies
where referencing_id = object_id('schema.object_name')