0

当我们对我们的 CRUD 存储过程进行代码生成时,我们添加了一个扩展属性来指示它们所基于的表。我希望能够查询sys.extended_properties以获取依赖于给定表的 proc 列表,但extended_properties拥有一个major_id,它似乎与sys.objectsor中的 object_id 不同sys.sysobjects

我需要什么魔法加入?

4

4 回答 4

3

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

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

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

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

于 2011-05-10T16:43:03.210 回答
2

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)索引。在您的情况下,它应该涵盖您正在寻找的内容。

于 2011-05-10T16:43:01.687 回答
2

从 sys.extended_properties 的书籍在线条目中,如果类 = 1、2 或 7,major_id = object_id。如果运行手动查询,属性的类是什么?我的猜测是以下将起作用:

select object_name([major_id]), [name], [value]
from sys.extended_properties
于 2011-05-10T16:43:43.160 回答
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/

于 2011-05-10T18:16:36.713 回答