How to find Cross-database dependency

SQL server other database dependency find using sql_expression_dependencies

SELECT DB_NAME() referencing_database_name,
	OBJECT_NAME (referencing_id) referencing_entity_name,
	ISNULL(referenced_schema_name,'dbo') referenced_schema_name,
	referenced_entity_name,
	ao.type_desc referenced_entity_type,
	ISNULL(referenced_database_name,DB_NAME()) referenced_database_name
FROM sys.sql_expression_dependencies sed
JOIN sys.all_objects ao ON sed.referenced_entity_name = ao.name 

Nested level dependency

WITH NestDep  AS (
    SELECT  o.[object_id] AS referenced_id , 
     o.name AS referenced_name, 
     o.[object_id] AS referencing_id, 
     o.name AS referencing_name,  
     0 AS NestLvl
 FROM  sys.objects o     WHERE o.name = 'obj-1'
    
UNION ALL
    
SELECT  d1.referenced_id,  
     OBJECT_NAME( d1.referenced_id) , 
     d1.referencing_id, 
     OBJECT_NAME( d1.referencing_id) , 
     NestLvl + 1
     FROM  sys.sql_expression_dependencies d1 
  JOIN NestDep r ON d1.referenced_id =  r.referencing_id
)
SELECT DISTINCT referenced_id, referenced_name, referencing_id, referencing_name, NestLvl
 FROM NestDep WHERE NestLvl > 0
ORDER BY NestLvl, referencing_id; 


To find link server dependency.

SELECT DB_NAME() referencing_database_name,
	OBJECT_NAME (referencing_id) referencing_entity_name,
	ISNULL(referenced_schema_name,'dbo') referenced_schema_name,
	referenced_entity_name,
	ao.type_desc referenced_entity_type,
	ISNULL(referenced_database_name,DB_NAME()) referenced_database_name
	,referenced_server_name
FROM sys.sql_expression_dependencies sed
JOIN sys.all_objects ao ON sed.referenced_entity_name = ao.name 
where referenced_server_name is not null

Reference

https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-sql-expression-dependencies-transact-sql?view=sql-server-ver15

Spread the love

Leave a Comment