zoukankan      html  css  js  c++  java
  • 查询数据库对象依赖关系

    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)
  • 相关阅读:
    「APIO2017」商旅
    【CQOI2017】小Q的表格
    【HNOI2016】树
    【NOI2018模拟】Yja
    测试
    Loj #6073.「2017 山东一轮集训 Day5」距离
    「AHOI / HNOI2017」影魔
    Loj 6068. 「2017 山东一轮集训 Day4」棋盘
    【SDOI2014】向量集
    远程服务器安装nginx
  • 原文地址:https://www.cnblogs.com/zanxiaofeng/p/1936230.html
Copyright © 2011-2022 走看看