2013-02-28 69 views
3

如果我有像這樣多種選擇:我可以有多種選擇,但只返回一個結果集

select * from A where A.name = 'linköping' 

IF @@ROWCOUNT = 0 
begin 
    select * from A where A.amount = 45 
end 

...我得到1分的結果集,如果第一選擇回報的東西。但是如果它運行第二個,我會得到兩個結果集;第一個沒有行,第二個沒有行。

有沒有辦法只返回第二個結果集,如果第二個選擇運行?

我寫這樣,因爲安德烈Gordeev的回答這個職位代碼:Can you have if-then-else logic in SQL?

(MSSQL 2000)

謝謝!

+0

在這種情況下,你應該使用'IF EXISTS' – 2013-02-28 09:53:14

回答

4

您需要防止第一選擇通過檢查,如果你會得到什麼結果回來運行前的選擇。

例如:

IF EXISTS (SELECT 1 FROM A WHERE A.name = 'linköping') 
BEGIN 
    SELECT * FROM A WHERE A.name = 'linköping' 
END 
ELSE 
BEGIN 
    SELECT * FROM A WHERE A.amount = 45 
END 
+0

如果你替換第一線這將是巨大的'IF EXISTS(SELECT 1從WHERE A.name = '林雪平') ' – 2013-02-28 09:57:57

+1

@ViswanathanIyer同意。這將會略微提升性能。我必須承認,我從下面的行復制並粘貼了查詢:) – 2013-02-28 10:00:29

1

這將與IF-ELSE邏輯一起使用。 [測試]

DECLARE @count as int 
set @count = (SELECT count(1) from A where A.name = 'linköping') 
if (@count = 0) 
BEGIN 
    select * from A where A.amount = 45 
END 
ELSE 
BEGIN 
select * from A where A.name = 'linköping' 
END 
1

不,它是不可能返回的結果取決於select語句的數量。 如果你想做單選按照@RB或@Jwalin Shah解決方案。

0

試試這個

IF @@ROWCOUNT = 0 
BEGIN 
    select * from A where A.amount = 45 
END 
ELSE 
BEGIN 
    select * from A where A.name = 'linköping' 
END 
相關問題