2011-12-11 9 views
3

SQL Server 2008 SP3でDBを使用していて、C#コードで関連する階層にすべてのスキーマ名、SQLデータベースからスキーマ名、テーブル名、および列名を読み取ってC#コードに戻す

public class SQLElement 
{ 
    public string SchemaName { get; set; } 
    public string TableName { get; set; } 
    public string ColumnName { get; set; } 
} 

し、リスト等を有していては:私は次のようSQLElementクラスを持っている

List<SQLElement> SQLElementCollection = new List<SQLElement>();

それでは、どのように私はDBからを読んで、このリスト(SQLElementCollection)に追加することができますか?

Create Table [General].[City] (
[Id]   BIGINT   NOT NULL IDENTITY(1, 1), 
[Title]  NVARCHAR(30) NOT NULL DEFAULT (N''), 
[Province_Id] BIGINT   NOT NULL 
) 

と私のようなリストが必要:例えば

たちは、このようなテーブルを作成するといずれかがこのことについてどんな考えを持っています

[0]={SchemaName="General", TableName="City", ColumnName="Id"} 
[1]={SchemaName="General", TableName="City", ColumnName="Title"} 
[2]={SchemaName="General", TableName="City", ColumnName="Province_Id"} 

編集:私たちは、各列の型または関連するプロパティを取得する方法を次のステップで

答えて

6

私の提案はSQLElementに別のメンバーDataTypeを含めることで、リスト内の結果を取る必要があります場合は変更権限があるか、プロパティ名がDataTypeの別のクラスを作成してからSQLElementから継承し、後で使用するためにデータ型名を保存してください。

SELECT t.name AS TableName, 
    SCHEMA_NAME(t.schema_id) AS SchemaName, 
    c.name AS ColumnName, 
    tp.name as DataType 
FROM sys.tables AS t 
    INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID 
    INNER JOIN sys.types tp ON c.system_type_id = tp.system_type_id 
ORDER BY TableName; 
0

DBのInformation_Schemaビューをご覧ください。これらはすでにあなたが望むすべてのものを持っています。データベースへ

2

接続し、次の文を実行します。

select * 
from INFORMATION_SCHEMA.COLUMNS 
order by TABLE_SCHEMA, TABLE_NAME, ORDINAL_POSITION; 

結果を確認してからのぞくと、あなたが必要なものを選択します。

1

このクエリは、あなたのすべての列名とスキーマ名を与えます

SELECT t.name AS tblName, 
SCHEMA_NAME(schema_id) AS [schemaName], 
c.name AS colName 
FROM sys.tables AS t 
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID 
where SCHEMA_NAME(schema_id) = 'dbo' // you can include this where clause if you want to add additional filter to the result set, like query only tables that belong in particular db schema, or query only tables that starts with particular name (maybe prefix or sufix), etc. 
ORDER BY tblName; 

あなたは、上記のクエリを実行し、

関連する問題