查询数据库对象依赖关系

USE TestDB1
GO
SELECT DISTINCT OBJECT_NAME(object_id) as objname
FROM sys.sql_dependencies
WHERE referenced_major_id = OBJECT_ID('dbo.tblProjects')
ORDER BY objname

虽然使用上面的代码可以从sys.sql_dependencies直接查找SQL对象的引用关系,但是这种方式只能查找单个数据库内的直接引用关系,对于跨库的引用以及通过动态SQL方式产生的引用通过这种方式是没有办法查找到的。但是可以使用文本查找的方式从每个数据的syscomments表遍历查找。
以下代码用来在TestDB1和TestDB2数据库中查找使用到tblProjects表的存储过程:

DECLARE @TXT VARCHAR(100)
SELECT @TXT = 'tblProjects'
DECLARE @SQL VARCHAR(MAX)
SELECT @SQL = ISNULL(@SQL + ' UNION ALL ','') +
+ ' SELECT OBJ.Name,OBJ.Type,'''
+ [Name]
+ ''' AS DBName FROM '
+ [Name]
+ '..sysobjects OBJ WITH (NOLOCK) INNER JOIN '
+ [Name]
+ '..syscomments CMT WITH (NOLOCK) ON OBJ.Id = CMT.Id WHERE (OBJ.Type=''P'' OR OBJ.Type=''V'') AND CMT.Text LIKE ''%'
+ @TXT
+ '%'''
FROM Master.sys.SysDatabases WITH(NOLOCK)
WHERE Name IN ('TestDB1','TestDB2')
EXEC(@SQL)

 

你可能感兴趣的:(数据库)