【问题标题】:How do I map the id in sys.extended_properties to an object name如何将 sys.extended_properties 中的 id 映射到对象名称
【发布时间】:2011-08-22 15:19:51
【问题描述】:

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

我需要什么魔法加入?

【问题讨论】:

    标签: sql-server extended-properties sysobjects


    【解决方案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/

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        我以前用它来测试扩展属性,所以我知道它可以工作。

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

        【讨论】:

        • sys.sql_expression_dependencies 可靠吗? IIRC,即使解析器无法确定所有依赖对象,也可以 CREATEALTER 存储过程。在那种情况下,他们不会从 DMV 中消失吗?
        • @Yuck:我不确定我的想法。它取代了不可靠的旧系统表,但我不记得这个表有多准确,抱歉。编辑:是的,更好sqlblog.com/blogs/aaron_bertrand/archive/2008/09/09/…
        【解决方案4】:

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

        如果 class 为 0,major_id 始终为 0。

        如果类是 1、2 或 7,major_id 是 object_id。

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

        编辑:我想补充一点,记录在案的 - 1、2、7 - 对应于 (1) 对象(例如表、存储过程)或列,(2) 参数,(7) 索引。在您的情况下,它应该涵盖您正在寻找的内容。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-08-07
          • 1970-01-01
          • 2012-04-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-06-03
          相关资源
          最近更新 更多