我已經花了很多時間良好的金額試圖找到一種方法來確定一個快捷方式列級依賴性,而無需搜索文本或使用第三方應用程序。另一個挑戰是在表名可能重複的多個數據庫中發現依賴關係,這會在搜索SP文本時導致誤報。
從SQL 2008開始,有一個函數可以在字段級別上返回跨數據庫的依賴關係。
下面的代碼工作有一些例外:
- 如果有存儲與表/無效引用字段已被刪除(順便說一句,我發現這是非常有用找到SP的程序將不能在該被表格修改意外打破)。
- 在SP以不同尋常的方式使用臨時表的情況下,它找不到所有依賴關係。
- 在某些情況下,我發現它是爲複雜的存儲過程返回誤報。
MSDN Documentation
此代碼應當從SP是爲了能夠跨越到其他數據庫相關性數據庫中運行。
SELECT
--SP, View, or Function
ReferencingName = o.name,
ReferencingType = o.type_desc,
--Referenced Field
ref.referenced_database_name, --will be null if the DB is not explicitly called out
ref.referenced_schema_name, --will be null or blank if the DB is not explicitly called out
ref.referenced_entity_name,
ref.referenced_minor_name
FROM sys.objects AS o
cross apply sys.dm_sql_referenced_entities('dbo.' + o.name, 'Object') ref
where o.type in ('FN','IF','V','P','TF')
是的,選項是正確的。如果存儲過程使用動態sql,它將不會被真正標識爲依賴項,除非該工具只是在proc的所有文本中查找列名,這會導致誤報等。 –
好的,謝謝。這是不幸的,我覺得有些事比沒有好。 – MrFox
您也可能需要更新以解決缺失的依賴關係:請參閱此處 - http://activ8nz.com/Blog/professional/post/2010/11/01/resolving-missing-dependencies-in-sql-server.aspx –