2012-06-12 70 views
0

我只設置SQL存儲過程,以特定的順序返回特定行的行(從多到少的重要):存儲過程返回只選擇

-- 1st Level -> Query a more detailed object... 
SELECT ... WHERE something 
-- if a result is find, the SP is returning the correct row. 
-- if rowcount = 0 then, the SP is returning an empty row 
-- and continues with the next query (less specific than the 1st one). 

IF @@ROWCOUNT = 0 
BEGIN 
SELECT .... WHERE something else... 
-- Again, if a result exists, the SP returns the correct row, but also 
-- the result of the 1st query is returned without rows... 
IF @@ROWCOUNT = 0 
BEGIN 
SELECT .... WHERE something else again... 
END 
END 

是否有任何選項來只返回SELECT語句返回一個非空行?我不想返回空行...並且每次行是第一個查詢的「子級別」時,我會在正確的行之前得到空結果。

我在想創建一個表變量。有沒有更好的方法?

+0

你最終只返回一行嗎?或者有可能這些查詢中有一些會返回多行?形狀是否相同(例如,每列中的相同列數和兼容數據類型)? –

回答

0

由於您正在尋找缺少行,爲什麼不在過程中使用if/else語句。喜歡的東西:

If exists(/*firstQuery*/ SELECT ... WHERE something) begin 
    SELECT ... WHERE something 
end else if exists (/*secondQuery*/ SELECT .... WHERE something else...) begin 
    SELECT .... WHERE something else... 
end else /*Third query*/ begin 
    SELECT .... WHERE something else again... 
end 

只記得檢查時是存在的東西,你應該只選擇一列(例如ID),如果你已經計算列那麼這可以在你的程序慢下來。

+0

In exists它與SELECT列表中的內容無關 - SQL Server足夠聰明,可以忽略它。我仍然懷疑重複連接或兩次查詢的子句會比列列表產生更大的影響。 –

+0

是的,但我想我會提及一些有關列以防萬一。 – Kyra

+0

此外,在存儲過程中,您可能可以在第一次成功查詢後使用'RETURN',而不是使用額外的'IF/ELSE'邏輯。 –