2011-05-10 100 views
0

當我們編寫我們的CRUD存儲過程時,我們添加一個擴展屬性來指示它們所基於的表。我希望能夠詢問sys.extended_properties以獲取依賴於給定表格的特效列表,但extended_properties包含的major_id與sys.objectssys.sysobjects中的object_id不相同。如何將sys.extended_properties中的標識映射到對象名稱

我需要什麼魔術連接?

回答

2

從sys.extended_properties的books online條目中,major_id = object_id如果class = 1,2或7.如果運行手動查詢,這個屬性的類是什麼?我的猜測是,下面的工作:

select object_name([major_id]), [name], [value] 
from sys.extended_properties 
+0

是的 - 它確實工作 – Rikalous 2011-05-12 09:33:46

2

MSDN,您必須檢查class字段以及major_id

如果類是0,major_id始終爲0。

如果等級爲1,2或7 major_id是 的object_id。

其他類似乎是無證的,因此我不會依賴它們。例如,類5似乎用於CLR程序集(SqlAssemblyProjectRoot)。在我的情況下,一個這樣的程序集的major_id是65673,並且該ID的sys.objects中甚至沒有不匹配的對象。 (1)對象(例如表,存儲過程)或列,(2)參數,(7)索引對應於(1)對象(例如表,存儲過程)或對應的記錄的1,2,7。在你的情況下,它應該涵蓋你要找的東西。

3

sys.extended_properties的MSDN描述major_id和minor_id。 上下文取決於類列。

現在,major_id = object_id在sys.objects當它是有道理的。

我以前用過這個測試擴展屬性,所以我知道它的工作原理。

但是,在您的問題的二讀中,存儲過程的擴展屬性與proc中使用的表之間沒有直接關聯。如果我理解正確,您必須通過sys.sql_expression_dependencies進行連接

+0

是'sys.sql_expression_dependencies'可靠嗎? IIRC,即使解析器無法確定所有依賴對象,也可以使用「CREATE」或「ALTER」存儲過程。在這種情況下,他們不會從DMV中錯過嗎? – Yuck 2011-05-10 16:48:33

+0

@Yuck:我不確定我的頭頂。它取代了舊的不可靠的系統表,但我不記得這個是多麼準確,對不起。編輯:是的,這是更好的http://sqlblog.com/blogs/aaron_bertrand/archive/2008/09/09/keeping-sysdepends-up-to-date-in-sql-server-2008.aspx – gbn 2011-05-10 16:53:44

1

不能直接回答你的問題,但一些額外的資源:

我有一個關於使用內置的擴展屬性的東西像文檔演示:http://code.google.com/p/caderoux/wiki/LeversAndTurtles

同時也出現了最近一系列的亞當·阿斯平在擴展性能的製品的SQLserver中央公佈:

http://www.sqlservercentral.com/articles/Metadata/72607/

http://www.sqlservercentral.com/articles/Metadata/72608/

http://www.sqlservercentral.com/articles/Metadata/72609/

http://www.sqlservercentral.com/articles/Metadata/72610/

相關問題