2012-03-29 26 views
0

我有一個存儲過程,它將某些數據合併並返回。 SP最多會返回我3行,滿足條件。即使條件不匹配,總是會返回UNION中的一些原始碼

有沒有一種方法可以強制SP返回空行,如果沒有與條件相匹配的數據?

這是我的SP的樣子:

SELECT Top 1 Col1, 'FirstResult' FROM Table T1 
     where SomeColumn='whatever' 

UNION ALL 

SELECT Top 1 Col2, 'SecondResult' FROM Table T1 
     where SomeColumn='whatever' 

UNION ALL 

SELECT Top 1 Col3, 'ThirdResult' FROM Table T1 
     where SomeColumn='whatever' 

我要永遠回我3行不管即使條件犯規匹配。當然,結果集中的數據將爲空或NULL

+1

這聽起來像是應該在GUI中完成的事情,而不是存儲過程(甚至是代碼的業務邏輯)。只是我的$ .02。 – 2012-03-29 16:58:32

回答

1

你可以去這裏證明,在這個答案的查詢工作,沒有行:http://www.sqlfiddle.com/#!3/51d1c/3

隨着1行中YourTable:http://www.sqlfiddle.com/#!3/ad1e8/1

下面是應該回到你正在尋找的過程:

CREATE PROCEDURE pExample_Get3ForcedRows 
    @FirstMatch VARCHAR(50) 
    ,@SecondMatch VARCHAR(50) 
    ,@ThirdMatch VARCHAR(50) 
AS 
BEGIN 

DECLARE @ForceTable TABLE 
(
    MatchColumn VARCHAR(50) NOT NULL 
) 

INSERT @ForceTable (MatchColumn) VALUES (@FirstMatch),(@SecondMatch),(@ThirdMatch) 

SELECT 
    T.Col1 
    , T.ResultColumn 
FROM @ForceTable F 
LEFT JOIN YourTable T 
    ON T.SomeColumn = F.MatchColumn 

END 
GO 
0
DECLARE @table (Col1 varchar, String2 varchar) 

IF ((SELECT COUNT(*) FROM Table T1 WHERE SomeColumn='whatever')>0) 
    INSERT INTO @table 
    SELECT Top 1 Col1, 'FirstResult' FROM Table T1 WHERE SomeColumn='whatever' 
ELSE 
    INSERT INTO @table 
    SELECT NULL AS Col1, '' 

IF ((SELECT COUNT(*) FROM Table T1 WHERE SomeColumn='whatever')>0) 
    INSERT INTO @table 
    SELECT Top 1 Col2, 'secondResult' FROM Table T1 WHERE SomeColumn='whatever' 
ELSE 
    INSERT INTO @table 
    SELECT NULL AS Col2, '' 

IF ((SELECT COUNT(*) FROM Table T1 WHERE SomeColumn='whatever')>0) 
    INSERT INTO @table 
    SELECT Top 1 Col3, 'thirdResult' FROM Table T1 WHERE SomeColumn='whatever' 
ELSE 
    INSERT INTO @table 
    SELECT NULL AS Col3, '' 

RETURN @table 

不知道是否有更優雅的版本,但這應該工作。

相關問題