2016-06-30 5 views
2

.NET GetSchemaメソッドを使用して、SQL Serverの一部のテーブルに関するメタデータを取得しようとしています。
データ型やサイズなどのColumns情報を返すことができますが、「ForeignKeys」を試すと、関連するテーブルの名前や関連する列名がわかりません。
以下は私の現在のコードです。
GetSchemaでこれを行うことはできますか?そうでない場合は、システムテーブルや情報テーブルでSQLクエリを使用することになります。
GetSchema答えがわからない場合は、お気軽に良いSQLクエリを提案してください。外部キー情報を.NETで取得する方法

using (SqlConnection connection = new SqlConnection(connectionString)) 
{ 
    connection.Open(); 
    string[] restrictions = new string[4]; 
    restrictions[1] = schemaName; 
    restrictions[2] = tableName; 
    DataTable schema = connection.GetSchema("ForeignKeys", restrictions); 
} 

答えて

0

私は私が私のWebホスト上で実行するためにそれらを得ることができる場合SMOオブジェクトを使用するつもりだと思う:ここで私は私のFKの列マッピングに使用するクエリがあります。 SqlClrProviderが見つからないという新しいエラーが発生しました。ローカルマシンでそのDLLを見つけることはできませんが、SMOはローカルマシン上で動作します。編集:参照を追加したSqlClrProvider.dllが見つかりました。私のWebホストに再公開され、完全に実行されました。 SMOオブジェクトを使用して外部キーのメタデータを取得する問題を解決しました。

0

外部キーの関係は、複数の列で構成できます。

select 
     IS_KCU1.CONSTRAINT_SCHEMA, 
     IS_KCU1.CONSTRAINT_NAME, 
     IS_KCU1.TABLE_SCHEMA FK_TABLE_SCHEMA, 
     IS_KCU1.TABLE_NAME FK_TABLE_NAME, 
     IS_KCU1.COLUMN_NAME FK_COLUMN_NAME, 
     IS_KCU2.TABLE_SCHEMA REFERENCED_TABLE_SCHEMA, 
     IS_KCU2.TABLE_NAME REFERENCED_TABLE_NAME, 
     IS_KCU2.COLUMN_NAME REFERENCED_COLUMN_NAME 
     from INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS IS_RC 

     inner join INFORMATION_SCHEMA.KEY_COLUMN_USAGE IS_KCU1 
     on IS_KCU1.CONSTRAINT_CATALOG = IS_RC.CONSTRAINT_CATALOG 
     and IS_KCU1.CONSTRAINT_SCHEMA = IS_RC.CONSTRAINT_SCHEMA 
     and IS_KCU1.CONSTRAINT_NAME = IS_RC.CONSTRAINT_NAME 

     inner join INFORMATION_SCHEMA.KEY_COLUMN_USAGE IS_KCU2 
     on IS_KCU2.CONSTRAINT_CATALOG = IS_RC.UNIQUE_CONSTRAINT_CATALOG 
     and IS_KCU2.CONSTRAINT_SCHEMA = IS_RC.UNIQUE_CONSTRAINT_SCHEMA 
     and IS_KCU2.CONSTRAINT_NAME = IS_RC.UNIQUE_CONSTRAINT_NAME 
     and IS_KCU2.ORDINAL_POSITION = IS_KCU1.ORDINAL_POSITION 
関連する問題