2012-03-14 4 views
0

テーブルを返すストアドプロシージャがあります。しかし、それは以下のような条件に応じて2種類のテーブルを返すことができますアプリケーションでSQLクエリによってテーブル名が返される

... 

if @TestCondition > 0 
     begin 
      select * 
      from Test1 NoExpiredTable 
     end 
    else 
     begin 
      select * 
      from Test2 ExpiredTable 
     end 

したがって、どのようにテーブル名を取得できますか?私が試したことは

if (ds.Tables[0].TableName == "NoExpiredTable") 
{ 

} 

しかしds.Tables [0] .TableNameは私を与える "表" です。

+0

テーブル結果に加えて、例えば、出力パラメータの提供を検討

選択場合procによって '' T''または '' F''に適切に設定された '@is_expired CHAR(1)'。 – onedaywhen

答えて

3

SQLクエリはテーブルを返しません。彼らは結果セットを返します。結果セットには名前がありません。

3

結果セットには元のテーブルの概念がありません。このプロシージャによって返されたレコードにテーブル名を含めることができます。 。 。

if @TestCondition > 0 
    begin 
     select *, 'NoExpiredTable' TableName 
     from Test1 NoExpiredTable 
    end 
else 
    begin 
     select *, 'ExpiredTable' TableName 
     from Test2 ExpiredTable 
    end 

他の列にアクセスするのと同じ方法でアクセスできます。

行が返されない場合、これはあなたのために何もしません。どのテーブルが選択されたか分かりません。

条件の結果(つまり、単一の列、TableNameを持つ1つのレコード)を含む単一のレコードを返し、次に実際のテーブルのレコードを返すことができます。例えば

if @TestCondition > 0 
    begin 
     select 'NoExpiredTable' TableName 

     select * 
     from Test1 NoExpiredTable 
    end 
else 
    begin 
     select 'ExpiredTable' TableName 

     select * 
     from Test2 ExpiredTable 
    end 
+0

私は両方の方法をアドバイスしたが、彼らは仕事をしなかった。 ds.Tables [0] .TableNameは名前として「テーブル」を与え続けます。何が問題なの? –

+0

Ryu:ストアドプロシージャをどのように呼び出すのか、どのようなデータがあるのか​​わからなくても、私は推測できませんでした。 - second - procedureを直接(QueryAnalyserで)実行すると、両方の結果セットが得られますか? 'ds.Tables [0] .TableName'メソッドがうまくいかない場合は、TableNameカラムにアクセスする必要があります。 'ds.Tables [0] .Rows [0] [" TableName "]'のようなものです。列を取得する構文を推測しています。データセットを使用したことはありません。 –

関連する問題