Sql server SQL Server查看存储过程完整关系

Sql server SQL Server查看存储过程完整关系,sql-server,stored-procedures,relational-database,diagram,Sql Server,Stored Procedures,Relational Database,Diagram,我正在使用SQLServer2012管理工作室在SQLServer2012 Express数据库上处理一系列非常复杂的存储过程 例如,我有一个存储过程SP1调用另一个存储过程SP2,SP2调用SP3,SP3调用SP4 我想看到的是一个图表,它可以为我提供这些存储过程和这些存储过程中使用的所有表之间的完整关系 我尝试过SQLServerManagementStudio提供的视图依赖项工具,但有时在单击选定存储过程的“视图依赖项”时,它会忽略子代存储过程。此外,它也不能完整地显示这些存储过程之间的关

我正在使用SQLServer2012管理工作室在SQLServer2012 Express数据库上处理一系列非常复杂的存储过程

例如,我有一个存储过程SP1调用另一个存储过程SP2,SP2调用SP3,SP3调用SP4

我想看到的是一个图表,它可以为我提供这些存储过程和这些存储过程中使用的所有表之间的完整关系

我尝试过SQLServerManagementStudio提供的视图依赖项工具,但有时在单击选定存储过程的“视图依赖项”时,它会忽略子代存储过程。此外,它也不能完整地显示这些存储过程之间的关系


有什么工具可以帮我吗?或者关于如何理解复杂关系存储过程的任何建议?

您可以围绕sys.sql_模块上连接的sys.objects(定义字段包含存储过程代码)构建一个递归查询,并为自己构建一个依赖项树。

我发现下面的查询非常有用,希望能有所帮助

select      
        distinct 
        ObjJectType=
        case Obj.xType
        When 'V' then
            'VIEW'
        When 'P' then
            'PROC'
        When 'D' then
            'INDEX'
        When 'TF' then
            'TABLE FUNCTION'
        When 'FN' then
            'FUNCTION'
        When 'U' then
            'TABLE'
        When 'F' then
            'FK CONSTRAINT'
        When 'PK' then
            'PK CONSTRAINT'
        When 'TR' then
            'TRIGGER'
        When 'S' then
            'SYSTEM OBJECT'
        end ,
        Obj.name
from 
        syscomments Com inner join sysobjects Obj
  on  Com.id = Obj.id
where 
        Com.text like '%sp_name%' 
order by Obj.name

像这样的存储过程嵌套对于文档来说是一场噩梦。实际上没有一个很好的工具来实现这一点,因为它涉及递归。你必须查看每个依赖对象的依赖关系。你尝试过Redgate吗?@SeanLange但是逐个查看需要花费太多时间,而且我是这个项目的新手,有没有加快速度的经验?@mhan0125我搜索过你需要为Redgate付费,有没有其他工具可以帮助你?如果你在版本控制中有你的程序(或至少在光盘中的某个位置)您可以用自己喜欢的语言编写一个脚本来查找依赖项,假设您实际上不需要诊断,但如果我直接查询sp代码,则很难确定sp是否在注释中或是否真的被调用。@lengsiqi您是对的。注释处理会使代码复杂化。我同意这是解决此问题的方法不要使用第三方工具。