構成ファイルから取得したSQLクエリがあります。このクエリには通常、3〜6個の結合が含まれています。
実行時に、SqlDataReaderで表される結果セットに基づいて、各列のテーブルの名前を見つける必要があります。
動作しないものがいくつかあります:
- SqlDataReader.GetNameは列名を返しますが、テーブル名は返しません。
- SqlDataReader.GetSchemaTableは、列情報を含むデータテーブルを返しますが、すべてのテーブル名はnullです。
- 現在のクエリの結果に関するデータが必要なため、information_schemaのクエリは役に立ちません(列名は一意ではありません。異なるテーブルに同じ名前の列があります)。
コンソールアプリケーションで.net3.5SP1/ C#/ SQLServer2008を使用しています。
編集:「列」は複数のテーブル、関数、さらには定数式から組み合わせることができるため、これがすべての場合に可能であるとは限りません。単純な場合に機能するものを探しています。
編集2:それが機能しなかった理由を見つけました-SqlDataReader.GetSchemaTableを使用してテーブル情報を取得できますが、CommandBehaviorをKeyInfoに設定する必要があります。これは、ExecuteReader呼び出しで行います。
reader = cmd.ExecuteReader(CommandBehavior.KeyInfo);