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

我同意這將是沒有某種第三方工具的情況下去解決它的方法。 –