2009-07-07 69 views
2

我有一個選擇查詢。我想用另一個選擇替換那個select查詢,如果它沒有返回任何行。SQL選擇 - 作爲一個返回

例如可以說我有:

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

在C#最後,我找回它作爲一個數據集。所以如果沒有行被返回,它會做另一個選擇。但是這個選擇將在表格[1]而不是表格[0]中。

所以基本上,我想要做的是與最後的更換在SQL存儲過程的第一選擇的結果,如果@@ ROWCOUNT = 0 我相信這是可以做到。我想要一個整潔的解決方案。

我可以做這樣的事情:

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

,但我有3種選擇。我想用max 2選擇來做,因爲我的select語句比給出的簡單例子更復雜,我不喜歡重複同樣的選擇兩次(例如,在Temp2上選擇)。

感謝

回答

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

+ 1場的歡呼聲..工會都做到了......因爲TEMP2不會有temp1中值,也沒有最後的地步......非常感謝:) – waqasahmed 2009-07-07 09:12:43

+0

確定,但如果去掉其中,即使Temp2中有行,它也會始終返回Temp1的行;這與您在原始問題中的邏輯不同。 – 2009-07-07 09:13:34

2

也許表變量?

declare @result table({column defs}) 

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

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

select * from @result