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'

そして、visibleTables をループして 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 に答える