2012-06-27 64 views
2

我不知道太多關於MS的世界,但現在恰好是我必須使用SQL Server Management Studio 2008中存儲過程的依賴工作室

我的問題:我有一個列在一個表中,我需要查看可能正在執行的所有存儲過程。

我試圖右鍵單擊並查看「依賴關係」,但似乎沒有返回應該是的一切。

問題像這樣的:SQL Server Dependencies有答案,提供3種解決方案

  1. 付費的第三方工具。
  2. 編寫自己的腳本。
  3. 將所有內容導出爲文本文件並對其進行擦除。

WTF?我錯過了明顯的東西嗎?這實際上是如何工作的?我會想象這是一個非常常見的用例:你想改變表格,並且你想確保你不會破壞任何東西。或者如果說你第一次看到一個帶有數據庫的新項目,並且想要查看某些列是如何填充存儲過程的。實際上沒有快速簡單的內置工作流程嗎?

+0

是的,選項是正確的。如果存儲過程使用動態sql,它將不會被真正標識爲依賴項,除非該工具只是在proc的所有文本中查找列名,這會導致誤報等。 –

+0

好的,謝謝。這是不幸的,我覺得有些事比沒有好。 – MrFox

+0

您也可能需要更新以解決缺失的依賴關係:請參閱此處 - http://activ8nz.com/Blog/professional/post/2010/11/01/resolving-missing-dependencies-in-sql-server.aspx –

回答

7

如果你需要按名稱查找數據庫對象(如表,列,觸發器) - 看看所謂SQL Search免費紅門工具,它做到這一點 - 它搜索整個數據庫的任何種類的字符串(S)。

enter image description here

enter image description here

這是一個偉大的必須具備的任何DBA或數據庫開發人員工具 - 爲什麼我已經提到它的絕對免費用於任何用途的?

+1

SQL Search非常棒 - 從我的數據庫中快速查找所有對您數據庫中某些內容的引用的最佳方法之一! – Charleh

+1

謝謝,這將解決我的問題。我仍然感到驚訝的是,微軟並沒有將這種功能包含在他們的產品中。 – MrFox

+0

@suslik:幸運的是,有像Red-Gate這樣的第三方工具供應商填補了這些「漏洞」 - 如果免費的話,它會更好! :-) –

0

我想知道爲什麼你不能通過'View Dependencies'對話框看到依賴關係,因爲它對我來說工作得很好。不過,您可以查詢「sys.sql_expression_dependencies」系統視圖並獲取所需的依賴關係信息。

SELECT OBJECT_NAME(referencing_id),OBJECT_NAME(referenced_id) 
FROM sys.sql_expression_dependencies 
WHERE referenced_id = OBJECT_ID('XXX') 

你當然也可以項目的其他信息,您可能需要。

+0

想知道是什麼造成了downvote! – alwayslearning

+0

這不是'View Dependencies'的功能。 –

+0

@David - 這是msdn關於'View Dependencies'的說法 - *當前對象的Object Dependencies(General Page)列出了必須存在的數據庫對象以使對象正常運行,並且依賴於選擇的對象。* MSDN進一步建議查詢我提到的視圖http://msdn.microsoft.com/en-us/library/ms345449(SQL.105).aspx – alwayslearning

1

使用此查詢:

SELECT ROUTINE_NAME, ROUTINE_DEFINITION 
FROM INFORMATION_SCHEMA.ROUTINES 
WHERE ROUTINE_DEFINITION LIKE '%YOUR COLUMN %' 
AND ROUTINE_TYPE='PROCEDURE' 
1

我已經花了很多時間良好的金額試圖找到一種方法來確定一個快捷方式列級依賴性,而無需搜索文本或使用第三方應用程序。另一個挑戰是在表名可能重複的多個數據庫中發現依賴關係,這會在搜索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') 
相關問題