【问题标题】:Select Extended Property from SQL Server tables从 SQL Server 表中选择扩展属性
【发布时间】:2011-10-06 14:08:53
【问题描述】:

我正在为客户的数据库编写一个简单的 CMS。有 12 个表,他们需要管理其中 4 个表中的所有数据。

我设置了一个动态数据项目(Linq-to-SQL,因为这是我最熟悉的),第一页使所有 12 个表都可以按应有的方式进行编辑。它们位于一个名为 visibleTables 的可枚举列表中。

接下来,我进入 SSMS 并创建了一个名为 UserEdit 的扩展属性,并将其设置为 0 或 1,具体取决于用户是否应该在该屏幕上看到它。

我想做的是通过该扩展属性过滤 visibleTables 列表,但不知道如何。

我可以通过此查询查看表列表和属性:

select major_id, name, value
from sys.extended_properties
where name = 'UserEdit'

我打算遍历可见表并删除带有 0 的表,但我还没有弄清楚,因为major_id 似乎不是我能找到的属性。

【问题讨论】:

    标签: .net sql-server-2008 c#-4.0 extended-properties


    【解决方案1】:

    好吧,根据http://msdn.microsoft.com/en-us/library/ms177541.aspx,您的扩展属性类(OBJECT_OR_COLUMN)的“major_id”确实表示“object_id”。因此,以下查询将为您提供所有扩展属性以及它们所属的表:

    select p.*, t.*
    from sys.extended_properties p
    inner join sys.tables t on p.major_id = t.object_id
    where class = 1
    

    您可以随意过滤它,但如果您需要帮助,请告诉我。

    【讨论】:

    • 完美!谢谢,军事。这正是我需要将这两个领域联系起来。
    【解决方案2】:
      SELECT major_id, minor_id, t.name AS [Table], c.name AS [Column], value AS [Extended Property]
      FROM sys.extended_properties AS ep
      INNER JOIN sys.tables AS t ON ep.major_id = t.object_id 
      INNER JOIN sys.columns AS c ON ep.major_id = c.object_id AND ep.minor_id = c.column_id
      WHERE class = 1 order by t.name; 
    

    这对我有用...

    【讨论】:

    • 添加属性名称使其更具可读性:SELECT major_id, minor_id, t.name AS [Table], c.name AS [Column], ep.name as PropertyName, value AS PropertyValue FROM sys. extended_properties AS ep INNER JOIN sys.tables AS t ON ep.major_id = t.object_id INNER JOIN sys.columns AS c ON ep.major_id = c.object_id AND ep.minor_id = c.column_id WHERE class= 1 order by t.name ;
    猜你喜欢
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 2023-03-22
    • 1970-01-01
    • 2020-03-11
    相关资源
    最近更新 更多