当我们对我们的 CRUD 存储过程进行代码生成时,我们添加了一个扩展属性来指示它们所基于的表。我希望能够查询sys.extended_properties
以获取依赖于给定表的 proc 列表,但extended_properties
拥有一个major_id,它似乎与sys.objects
or中的 object_id 不同sys.sysobjects
。
我需要什么魔法加入?
当我们对我们的 CRUD 存储过程进行代码生成时,我们添加了一个扩展属性来指示它们所基于的表。我希望能够查询sys.extended_properties
以获取依赖于给定表的 proc 列表,但extended_properties
拥有一个major_id,它似乎与sys.objects
or中的 object_id 不同sys.sysobjects
。
我需要什么魔法加入?
sys.extended_properties的 MSDN描述了 major_id 和 minor_id。上下文取决于类列。
现在,在sys.objects中major_id = object_id有意义。
我以前用它来测试扩展属性,所以我知道它有效。
但是,在第二次阅读您的问题时,存储过程的扩展属性与过程中使用的表之间没有直接联系。如果我理解正确,您必须通过sys.sql_expression_dependencies进行连接
从MSDN中,您必须检查该class
领域以及major_id
.
如果 class 为 0,major_id 始终为 0。
如果类是 1、2 或 7,major_id 是 object_id。
其他类似乎没有记录,因此我不会依赖它们。例如,类 5 似乎用于 CLR 程序集 (SqlAssemblyProjectRoot)。在我的情况下major_id
,这样的程序集是 65673,并且该 ID 中甚至没有不匹配的对象sys.objects
。
编辑:我想补充一点,记录的那些 - 1、2、7 - 对应于(1)对象(例如表、存储过程)或列,(2)参数,(7)索引。在您的情况下,它应该涵盖您正在寻找的内容。
从 sys.extended_properties 的书籍在线条目中,如果类 = 1、2 或 7,major_id = object_id。如果运行手动查询,属性的类是什么?我的猜测是以下将起作用:
select object_name([major_id]), [name], [value]
from sys.extended_properties
不是直接回答你的问题,而是一些额外的资源:
我有一个关于使用内置扩展属性的演示文稿,例如文档: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/