首页 > 解决方案 > 如何在 SQL Server 中查找引用系统表/函数的用户定义对象

问题描述

我有几个引用系统表和函数的用户定义的存储过程和函数,我的目的是找到这些资源并删除它们,我使用下面的查询来查询我知道其中有系统对象的 SP 之一:

    SELECT d.object_id,
           d.referenced_major_id,
           o.name,
           o1.name
    FROM sys.sql_dependencies d 
    JOIN sys.objects o ON o.object_id = d.referenced_major_id 
    JOIN sys.objects o1 ON o1.object_id = d.object_id AND d.object_id =
                          'ID_Of_UserDefinedSP_That_refers_system_Tables'

但它不返回任何系统引用的对象,我尝试过的其他功能:

sys.dm_sql_referencing_entities
sys.dm_sql_referenced_entities

如果有人查询以查找引用系统表/函数的所有用户定义函数/视图/StoredProcedures(SP),那就太好了

标签: sqlsql-server

解决方案


以下查询返回视图类型依赖信息、存储过程、函数和与实体类的连接。

SELECT 
  *
FROM sys.sql_expression_dependencies  AS sd
INNER JOIN sys.objects AS o
    ON o.object_id = sd.referencing_id

获取所有程序

Select * from sysobjects where type = 'p'

获取所有视图

Select * from sysobjects where type = 'v'

获取所有功能

SELECT
     name AS 'Function Name',
     SCHEMA_NAME(schema_id) AS 'Schema',
     type_desc AS 'Function Type', 
     create_date AS 'Created Date'
FROM
     sys.objects
WHERE
     type_desc LIKE '%FUNCTION%';

获取所有具有依赖关系的过程

SELECT 
  *
FROM sys.sql_expression_dependencies  AS sd
INNER JOIN sys.objects AS o
    ON o.object_id = sd.referencing_id where type = 'p'

推荐阅读