2016-09-23 22 views
0

に選択クエリから第2の値を取得します。私は、問題は、もちろん、このクエリが返す(あるC#、私は単純なSQLクエリを持っている別の

using(SqlCommand cmd = new SqlCommand(query,conn)) 
{ 
    var tmp = Convert.ToInt32(cmd.ExecuteScalar()); 
} 

を使用していvalの値を取得するには

SELECT val FROM ExampleTable WHERE id in (1,2,3) 

を)1行以上。 は、私はそのような別のSQLクエリにパラメータとしてそれを使用するには、この値が必要になります。

SELECT val2 FROM ExampleTable2 WHERE val = @val 

using(SqlCommand cmd2 = new SqlCommand(query2,conn)) 
{ 
    cmd2.Parameters.AddWithValue("@val",tmp); 
    var tmp2 = Convert.ToInt32(cmd2.ExecuteScalar()); 
} 

この1つは、TMPの最初の値のみを取得します。私はそれらのすべてをチェックしたい、私は2番目のクエリがNULLを返した場合、それはパラメータとしてtmpの次の値をとります。

最初のクエリで複数の行が返されると、2番目のクエリでnullが返されることがあります。それは別のSQLクエリでtmp2の値を使用しているので問題です。何か案は ?

+0

なぜ、joinまたはサブクエリを使用していないのですか –

+0

なぜtemp2で 'Convert.ToInt32'を使用していますか?あなたはtmp2がnullになる可能性があると言っている間に! –

+0

@SunilはConvert.Toint32とint.parseの間でdiffを読んでいます –

答えて

1

あなたはおそらくそれを示唆する方法で行うことができますが、SQLでクエリを記述して実行するほうがずっと簡単です。

SELECT val FROM ExampleTable WHERE id in (SELECT val2 FROM ExampleTable2 WHERE val = @val) 

のいくつかの組み合わせは、私は非常にあなたが何をしようとして伝えることはできませんが、それはそのようなものです。

このアプローチは、データの負荷を先に戻すのではなく、サーバー上のすべてを実行することによってパフォーマンスに役立ちます。& DBと接続設定によっては、独立した2つの呼び出しではなく、データの一貫したスナップショットとして実行できるため、正しい可能性が高くなります。

+0

それは動作します。ありがとうございました。 – fanarek

関連する問題