日期:2014-05-17  浏览次数:20476 次

关于表依赖对象问题
问题是这样的,由于项目逐渐做大,在修改一些底层表的时候,肯定需要去查一下依赖的数据表。
之前一直用右键然后点击查看依赖关系的窗口来查看。
这两天在研究系统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