2012-05-14 24 views
5

我已經知道SQL Server Management Studio中的「查看依賴項」功能是邊緣無用的,因爲它幾乎不會返回所有依賴項,但是,還有更好的選擇嗎?由於顯而易見的原因,這是一個非常強大的功能,但如果你不能依賴結果(就像微軟的情況一樣),無論如何你都必須手工完成所有的工作,以保證安全。替代SQL Server Management Studio「查看依賴項」

這似乎很容易實現,有沒有任何工具可以有效處理這個問題?

作爲一個側面說明,有沒有人知道「視圖依賴」有什麼問題?是否存在一個特定的依賴類,它無法識別?

+0

http://sqlblog.com/blogs/aaron_bertrand/archive/2008/09/09/keeping-sysdepends-up-to-date-in-sql-server-2008。aspx –

回答

2

紅門有一個名爲SQL Dependency Tracker的工具,工作得很好。

您也可以針對sys.sql_dependencies視圖編寫一個查詢,它將提供一些基本信息。與此相似:

SELECT o.name, o.type_desc, p.name, p.type_desc 
FROM sys.sql_dependencies d 
INNER JOIN sys.objects o 
    ON d.object_id = o.object_id 
INNER JOIN sys.objects p 
    ON d.referenced_major_id = p.object_id 

這裏是爲了尋找一個依賴文章:

Finding dependencies in SQL Server 2005

+0

雖然這可以回答這個問題,但它似乎是一個非常陡峭的投資,以滿足上面強調的單一需求(顯然這個工具還有其他功能,可能使其價值不菲)。任何其他(更便宜)的建議? –

+2

我更新了我的答案,可以使用針對依賴性視圖的查詢 – Taryn

2

你可以嘗試使用SQL的搜索,這確實一個文本搜索對象名稱和文本定義。其優點是它也會選擇動態SQL引用,缺點是它可能會選擇誤報,因爲它不是基於真正的依賴關係樹進行搜索。

http://www.red-gate.com/products/sql-development/sql-search/

另一個優點是,它是目前免費。

+1

明確地說,它不會拾取所有動態SQL引用,特別是那些依賴對象可以作爲參數並在應用程序或其他過程中定義爲字符串。 –

+0

是的。沒有什麼特別的魔法可以解析T-SQL來重建對象引用......這可能是某種東西。我想這個功能需要SQL Search與SQL分析器一起工作。有趣的想法。 –

0

這是一個三步過程。仍然不完美,但有助於消除一些差距。假設您正在查找表「WidgetUser」的依賴關係:

首先,獲取可能引用該表的所有模塊的列表。將查詢結果輸出到文本:

select 'EXEC sys.sp_refreshsqlmodule ''dbo.' + OBJECT_NAME(m.object_id) + '''' 
from sys.sql_modules m 
where m.definition like '%WidgetUser%' 

接下來,粘貼輸出文本並運行更新。這將是這樣的:

EXEC sys.sp_refreshsqlmodule 'dbo.up_WidgetUser_Select' 
EXEC sys.sp_refreshsqlmodule 'dbo.up_WidgetUser_Update' 
EXEC sys.sp_refreshsqlmodule 'dbo.WidgetUserView' 
EXEC sys.sp_refreshsqlmodule 'dbo.ufx_WidgetUser_Fooinize' 
... 

現在,您的依賴是高達最新,運行sp_depends

EXEC sp_depends @objname = N'dbo.WidgetUser' 
4

下旬的一個,但希望有用的,因爲推薦的工具是免費的...

我使用一個類似的工具來推薦大衛 - ApexSQL Search。他們聲稱擁有自己的依賴關係跟蹤機制,適用於除動態SQL以外的所有應用程序。

我還沒有詳細測試,以確認這雖然......

免責聲明:我不是在這家公司隸屬於但我經常使用他們的工具。

相關問題