从SQL Server表中选择扩展属性

时间:2011-07-16 02:17:45

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

我正在为客户的数据库编写一个简单的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'

然后我将遍历visibleTables并删除那些带有0的那些,但我还没想出来,因为major_id似乎不是我能找到的属性。

2 个答案:

答案 0 :(得分:8)

嗯,根据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

您可以根据需要对其进行过滤,但如果您需要帮助,请与我们联系。

答案 1 :(得分:3)

  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; 

这项工作对我来说......