4

我正在为客户的数据库编写一个简单的 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 似乎不是我能找到的属性。

4

2 回答 2

9

好吧,根据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

您可以根据需要对其进行过滤,但如果您需要帮助,请告诉我。

于 2011-07-16T03:13:09.613 回答
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; 

这项工作对我...

于 2013-10-18T11:57:57.827 回答