2012-04-18 2 views
0
кубиками

Это, как будет структурирована хранимая процедура:хранимой процедуры с параметром по умолчанию NULL для возврата результатов

[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 СП будет в конечном итоге вернуть это (все комбинации) ..

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 , но оставшиеся параметры (например, Width и Trim будут исключены из результатов и будут искать, будут и когда переданы как 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

Это должно удовлетворить ваши потребности, если вы предоставите параметры, то он использует его для фильтрации в противном случае он не будет:

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, все остальные уровни не возвращаются. –

+0

Измените AND на OR. –

+0

Это возвращает слишком много разных результатов. –

Смежные вопросы