在SQL编码中,很多编程人员常会使用嵌套view或者存储过程(sproc)完成代码,虽然出于性能和可维护性的考虑并不推荐使用多层嵌套,但现实中仍然是较为常见的编码习惯(方便呗~~)。那么针对多层嵌套的情况需要找出所有用户自定义表(或其它类型对象)往往就显得不是那么的容易了,当然可以通过一层一层统计获得,那么有没有精确并快速的方法找出所有的表呢。
首先,得从系统表sys.sql_expression_dependencies说起,该系统表主要用于查询SQL Server对象间的依赖关系,例如,在视图定义中引用表时,作为引用实体的视图将依赖于表这个被引用的实体,用户定义实体的每个按名称依赖项在此表中均占一行。
以下SQL 用于查询所有给定对象依赖的所有对象。如给定的对象为视图,则返回当前视图所有依赖的对象(table,view,fun,etc),因此可以查询出视图中所用的实体对象。
SELECT OBJECT_NAME(referencing_id) AS referencing_entity_name,
o.type_desc AS referencing_desciption,
COALESCE(COL_NAME(referencing_id, referencing_minor_id), '(n/a)') AS referencing_minor_id,
referencing_class_desc,
referenced_entity_name,
o2.type_desc AS referenced_desciption,