2009-07-07 12 views
2

私は選択クエリを持っています。私はその選択クエリを別の選択で置き換える場合は、その行が返されません。例えばSQL Select - one as return

は私が持って言うことができます:

Select * from Temp2 
if (@@rowcount=0) 
select * from Temp1 

C#の終わりに、私は、データセットとしてそれを取得します。したがって、行が返されない場合、別の選択が行われます。しかし、この選択は、テーブル[0]ではなくテーブル[1]にあります。

本質的に、私がしたいのは、SQLストアドプロシージャの最初の選択結果を@@ rowcount = 0ならば最後のものに置き換えることです。 これができると確信しています。私はきちんとした解決策が必要です。

私はこのような何か行うことができます。

if ((select count(ID) from Temp2) =0) 
    select * from Temp1 
else 
    select * from Temp2 

を、私は3つの選択を持っています。私はselectステートメントが与えられた簡単な例よりも複雑で、同じセレクトを2回繰り返すことを嫌う(例えばTemp2を選択する)ので、max 2 selectでそれをやりたい。

おかげ

答えて

9
select * from Temp2 
UNION ALL 
select * from Temp1 
where not exists (select * from Temp2) 
+1

+ 1歓声...組合すべてがOK – waqasahmed

+0

:)どうもありがとうございました... TEMP2をTEMP1値を持っていないので、どこ最後の意味がありません...それをやったが、あなたは削除する場合Temp2に行があっても、常にTemp1という形式の行を返します。元の質問にあったロジックとは異なります。 –

+0

私は知っている..私の選択ステートメントは、結果をフィルタリングするwhere句を持っています。そして、結果は決して返されません。一つのselectの行も別のselectの行として存在します。 – waqasahmed

2

おそらく、テーブル変数?

declare @result table({column defs}) 

insert @result 
select (..query 1...) 

if(@@rowcount = 0) 
    insert @result 
    select (..query 2...) 

select * from @result 
+0

+1ありがとうございます。しかし、これはより複雑な解決策です。しかし、私は将来もっと複雑なストアドプロシージャを使う必要があるかもしれないので、もう一度感謝します。 – waqasahmed