5

我正在使用SQLSEVER 2012 Management studio在SQLSERVER 2012 Express数据库上处理一堆非常复杂的存储过程。SQL Server视图存储过程完整关系

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

我想看到的是一个图,可以给我提供它们之间的关系全存储过程以及这些存储过程中使用的所有表。

我试过了SQL Server管理工作室提供的视图依赖项工具,但有时候我点击选择存储过程的“视图依赖项”后遗漏了后代存储过程。它也不能显示这些存储过程之间关系的完整画面。

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

+2

存储procs像这样嵌套是文件的噩梦。实际上这不是一个很好的工具,因为它涉及递归。您必须查看每个依赖对象的依赖关系。 –

+1

你试过Redgate吗? – mhan0125

+1

@SeanLange但是一个接一个地看待需要太多时间,我对这个项目很陌生,有关如何加快速度的任何经验? – lengsiqi

回答

1

我发现下面的查询挺有用的,希望能帮到。

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 
1

您可以围绕sys.sql_modules(定义字段包含sproc代码)加入的sys.objects构建一个递归查询,并构建一个依赖关系树。

+1

但是,如果我直接查询sp代码,将很难确定sp是否在注释中,或者真的被调用。 – lengsiqi

+0

@lengsiqi你说得对。注释处理将使代码复杂化。 – Ilan

+0

我同意这将是没有某种第三方工具的情况下去解决它的方法。 –