2011-07-16 9 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。それはまさに私が2つの分野を関連させるのに必要なものです。 – 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をPropertyName、値AS PropertyValue FROM sys.extended_properties AS 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 ここでは、class = 1 order by t.name; – smirkingman

関連する問題