2012-04-13 5 views
3

データベースのクエリを実行してテーブルのスキーマに関する情報を取得する方法はありますか?私は、列名のリストとそれらが主キーであるかどうかを知ることに興味があります。これは可能ですか?私はタイプ、ちょうどその名前とプライマリキーかどうか気にしない。データベーステーブルのフィールドを動的に一覧表示する

サンプル表:

Table Organism 
{ 
    primary: int ID; 
    int Kingdom; 
    int Phylum; 
    int Class; 
    int Genus; 
    int Species; 
    nvarchar(50) Name; 
} 

使用例:

List<Tuple<string, bool>> t = ReadTable("Organism"); 
t.ForEach(x => Console.WriteLine(x.Item2 ? x.Item2 + ": " + x.Item1 : x.Item1)); 

サンプル出力:

True ID 
Kingdom 
Phylum 
Class 
Genus 
Species 
Name 

私はC#4.0およびSQL Server 2008 R2を使用しています。私はだと思います。これはシステムテーブルを使用して行うことができますが、私はそれを行う方法がわかりません。

答えて

2
select col.* 
from sys.columns col 
join sys.tables tab on col.object_id = tab.object_id 
where tab.name = @tabName 
order by col.column_id 

システムビューには豊富なデータが含まれており、使いやすいです。

+0

トス。 index_columnsテーブルを使用して主キー情報を取得します。 –

+0

私はPKがsys.columnsにあると思います。クラスタード・インデックスはsys.indexにありますが、これは別の概念です。 – usr

1

あなたは、このようなハッククエリ

select * from Organism where 1=2 

とメタデータは、例えば、Information Schema Viewsで取得することができ、キーの使用とフィールド名を取得することができます:sys.indexesとSYSに参加する中

SELECT * FROM databaseName.INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
Where TABLE_NAME='Organism' 
関連する問題