我正在为客户的数据库编写一个简单的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似乎不是我能找到的属性。
答案 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;
这项工作对我来说......