Elenca gli oggetti sottostanti utilizzati in una funzione SQL Server
-
26-09-2020 - |
Domanda
Io uso qui sotto per ottenere un elenco di oggetti sottostanti in 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
.
Non riesco a trovare alcuna tabella di sistema che ha fornito gli oggetti base in una funzione.Qualcuno ha idea di come tirare facilmente queste informazioni?Ho a che fare con molte funzioni con più oggetti DB di base e vuoi evitare sforzi manuali per ottenere queste informazioni.Grazie!
Soluzione
sp_depends ti fornirà elenco di oggetti dipendenti in tutte le versioni attualidi SQL Server ma è elencato come deprecato.
Ecco un articolo MSDN con un modo per trovare oggetti che fanno riferimentoUna funzione e con piccole modifiche è possibile ottenere l'elenco di oggetto referenziato da una funzione:
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);
.
Altri suggerimenti
* Leggi *
Come indicato in @ spörri Risposta sopra, sys.sql_dependencies
è deprecato.
.
sys.sql_dependendies (transact-sql) : .
Questa funzione verrà rimossa in una versione futura di Microsoft SQL Server.Evitare di utilizzare questa funzione nel nuovo lavoro di sviluppo e pianificare Modifica applicazioni che utilizzano attualmente questa funzione.Uso sys.sql_expression_dependendies invece.
.
Ho osservato tra 3 funzioni, un ID oggetto funzionali mancava nella tabella deprecata sys.sql_dependencies
e ho trovato invece tutto nella tabella sys.sql_expression_dependencies
.Quindi usa il seguente per ottenere le dipendenze:
select *
from sys.sql_expression_dependencies
where referencing_id = object_id('schema.object_name')
.