2011-07-16 70 views
3

我正在爲客戶端的數據庫編寫一個簡單的CMS。有12個表格,他們需要管理其中4個表格中的所有數據。從SQL Server表中選擇擴展屬性

我建立了一個動態數據項目(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似乎並不是我能找到的財產​​。

回答

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 

只要你喜歡你可以過濾,但讓我知道如果你需要幫助。

+0

完美!謝謝,Milimetric。這正是我需要將這兩個領域聯繫起來的。 – nycdan

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; 

這項工作對我來說...

+0

添加屬性的名稱使其更具可讀性: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; – smirkingman