当我们编译我们的CRUD存储过程时,我们添加一个扩展属性,指示它们所基于的表。我希望能够查询sys.extended_properties
以获取依赖于给定表的proc的列表,但是extended_properties
包含一个major_id,它与{{1中的object_id似乎不相同}或sys.objects
。
我需要什么神奇的连接?
答案 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/