关于表依赖对象问题
问题是这样的,由于项目逐渐做大,在修改一些底层表的时候,肯定需要去查一下依赖的数据表。
之前一直用右键然后点击查看依赖关系的窗口来查看。
这两天在研究系统SP,看到了sp_depends存储过程,结果对同一张表,两种方法的结果是完全不同的。
sp_depends返回的结果只有2个视图,但是查看依赖关系的界面里有多个SP还有许多视图。
实际查看后,查看依赖关系界面里的SP以及视图确实包含了这个表对象,那么为什么sp_depends中不返回呢?
由于系统本身的结果都不同,导致我现在两个功能都不敢信任了
网上也找了一圈,很多都是在说这两个方法,暂时没有查到解释这两者区别的,所以特来求助
[解决办法]
方法1:
SELECT distinct so.name
FROM syscomments sc
INNER JOIN sysobjects so ON sc.id = so.id
WHERE charindex('对象名', text) > 0
方法2:
SELECT routine_name, routine_type FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_DEFINITION LIKE '%对象名%'
由于每个方法的侧重点可能不同,所以查询出来的结果也不同
[解决办法]
试试这个:
SELECT referencing_id,
OBJECT_NAME(referencing_id) as objname,
referencing_class_desc, --引用实体的类型
is_schema_bound_reference, --被引用实体是否绑定到架构
referenced_class_desc, --被引用实体的类型
referenced_server_name, --被引用服务器的名称
referenced_database_name, --被引用数据库的名称
referenced_schema_name, --被引用实体的架构
--如果是跨服务器数据库的则为NULL;对于非绑定架构的引用,
--如果被引用实体不存在或无法解析,则为null
--如果被引用实体的架构依赖于调用方架构,会在运行时解析,此时is_caller_dependent=1
referenced_id,
referenced_minor_id , --引用实体为列时被引用列的ID
is_caller_dependent , --被引用实体是否依赖于运行时的解析,
--如果依赖那么referenced_id为null
is_ambiguous --指出引用为不明确引用
FROM SYS.sql_expression_dependencies