2012-04-18 105 views
0

這是怎樣的存儲過程將被結構化:默認空參數存儲過程返回立方結果

[dbo].[getSp] (
    @Color varchar(10) = Null, 
    @Finish varchar(10) = Null, 
    @Height varchar(10) = Null, 
    @Type varchar(10) = Null, 
    @Trim varchar(10) = Null, 
    @Width varchar(10) = Null 
) 

這是數據的外觀之前searched..This數據是不完整的,但作爲一個例子來得到一個主意。每個組合將在這裏..

Color | Finish | Height | Type | Trim | Width | 
Blue | Shiny | Tall | Toaster | Normal | 3.5 | 
(NULL) | (NULL) | (NULL) | Toaster | (NULL) | 3.5 | 
(NULL) | (NULL) | Tall | Toaster | Deco | 4 | 
(NULL) | Shiny | Tall | Toaster | Deco | 4 | 
Blue | Shiny | (NULL) | Toaster | Deco | 4 | 
(NULL) | Shiny | Tall | Toaster | Deco | 4 | 
(NULL) | Satin | Tall | Toaster | Deco | 4 | 
    Red | (NULL) | Tall | Toaster | Deco | 4 | 

SELECT語句將有Type作爲主查找現場,所以它看起來是這樣的:

SELECT * FROM TABLE WHERE Type = @Type And 
(

..... Confused about this part, 

) 

但基本上,我想運行存儲過程爲僅包括那些組合,它們是在表中找到的行當僅與PARAMS的一部分調用,像這樣:

[getSp] 
@Color='Blue', 
@Finish='Shiny', 
@Type='toaster' 

的d的SP最終會返回此(每個組合)..

1. Blue Shiny Tall Toaster 
2. Blue Shiny Toaster 
3. Blue Tall Toaster 
4. Blue Toaster 
5. Tall Toaster 
6. Shiny Toaster 
7. Shiny Tall Toaster 

所以我很困惑如何構建Where語句在存儲過程中的每一個組合返回只有那些你在存儲過程PARAMS包括,但其餘參數(如WidthTrim)將被排除在搜索結果之外,默認情況下會以NULL的形式傳遞。

我已經試過這沒有任何的運氣...

SELECT * FROM TABLE WHERE 
Type = @Type AND 
(
COLOR = COALESCE(@Color,COLOR) AND... 
... for each other param 
) 

我已經試過這沒有任何的運氣...

SELECT * FROM TABLE WHERE 
Type = @Type AND 
(
(Color = @Color OR COALESCE(@Color,COLOR) IS NULL) OR... 
... for each other param 
) 

我試圖構建SQL語句,但也失敗了。任何建議都會有幫助。

回答

0

這應該滿足你的需要,如果你提供一個PARAM那麼它會使用其他方式來過濾也不會:

SELECT * 
FROM table_1 
WHERE (@Color IS NULL OR Color = @Color) 
AND (@Finish IS NULL OR Finish = @Finish) 
AND (@Height IS NULL OR Height = @Height) 
AND (@Type IS NULL OR Type = @Type) 
AND (@Trim IS NULL OR Trim = @Trim) 
AND (@Width IS NULL OR Width = @Width) 
+0

不回我要找的結果..其實它只返回像#1這樣的行,所有其他級別不會返回。 – 2012-04-18 08:01:16

+0

將AND更改爲OR。 – 2012-04-18 17:14:09

+0

這會返回太多不同的結果。 – 2012-04-18 22:17:09