如何将sys.extended_properties中的id映射到对象名称

时间:2011-05-10 16:34:38

标签: sql-server extended-properties sysobjects

当我们编译我们的CRUD存储过程时,我们添加一个扩展属性,指示它们所基于的表。我希望能够查询sys.extended_properties以获取依赖于给定表的proc的列表,但是extended_properties包含一个major_id,它与{{1中的object_id似乎不相同}或sys.objects

我需要什么神奇的连接?

4 个答案:

答案 0 :(得分:3)

sys.extended_properties的MSDN描述了major_id和minor_id。 上下文取决于类列。

现在,major_id = sys.objects中的object_id是有意义的。

我之前用过这个来测试扩展属性,所以我知道它有效。

但是,在您的问题的第二次阅读中,存储过程的扩展属性与过程中使用的表之间没有直接链接。如果我理解正确的话,你必须通过sys.sql_expression_dependencies进行连接

答案 1 :(得分:2)

MSDN开始,您必须检查class字段以及major_id

  

如果class为0,则major_id始终为0.

     

如果class为1,2或7,则major_id为   的object_id。

其他类似乎没有文档,因此我不会依赖它们。例如,类5似乎是用于CLR程序集(SqlAssemblyProjectRoot)。在我的情况下,一个这样的程序集的major_id是65673,sys.objects中对于该ID甚至没有不匹配的对象。

编辑:我想补充一下,记录的文件 - 1,2,7 - 对应于(1)对象(例如表格,存储过程)或列,(2)参数,(7)索引。在你的情况下,它应该涵盖你正在寻找的东西。

答案 2 :(得分:2)

从sys.extended_properties的books online条目中,如果class = 1,2或7,则major_id = object_id。如果运行手动查询,该属性的类是什么?我的猜测是以下方法有效:

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

答案 3 :(得分:1)

不是直接回答你的问题,而是一些额外的资源:

我有一个关于在文档中使用内置扩展属性的演示文稿:http://code.google.com/p/caderoux/wiki/LeversAndTurtles

最近,Adam Aspin在SQLServer Central发布了一系列关于扩展属性的文章:

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/