2010-07-12 5 views
0

Я хочу сделать что-то вроде этого:Инлайн Если отчеты в SQL

DECLARE @IgnoreNulls = 1; 

SELECT Col1, Col2 
FROM tblSimpleTable 
IF @IgnoreNulls 
BEGIN 
    WHERE Col2 IS NOT NULL 
END 
ORDER BY Col1 DESC; 

Идея заключается в том, чтобы, в очень PHP/ASP.NET-иш своего рода путь, только фильтр NULLs, если пользователь хочет. Возможно ли это в T-SQL? Или нам нужен один большой IF блок, как так:

IF @IgnoreNulls 
BEGIN 
    SELECT Col1, Col2 
    FROM tblSimpleTable 
    WHERE Col2 IS NOT NULL 
    ORDER BY Col1 DESC; 
END 
ELSE 
BEGIN 
    SELECT Col1, Col2 
    FROM tblSimpleTable 
    ORDER BY Col1 DESC; 
END 

ответ

4

Вы можете сделать это таким образом:

SELECT Col1, Col2 
FROM tblSimpleTable 
WHERE (@IgnoreNulls != 1 OR Col2 IS NOT NULL) 
ORDER BY Col1 DESC 
1

В целом (если таблица не маленький) лучший подход, чтобы выделить случаи и сделайте что-нибудь подобное в своем вопросе.

IF (@IgnoreNulls = 1) 
BEGIN 
    SELECT Col1, Col2 
    FROM tblSimpleTable 
    WHERE Col2 IS NOT NULL 
    ORDER BY Col1 DESC; 
END 
ELSE 
BEGIN 
    SELECT Col1, Col2 
    FROM tblSimpleTable 
    ORDER BY Col1 DESC; 
END 

Это менее вероятно, что вы столкнетесь с проблемами при подборе оптимальных планов запросов.

+0

+1, если имеется только один параметр, как вопросы, кажется, указывает, что это выглядит как хороший решение. [Динамические условия поиска в T-SQL - с использованием операторов IF] (http://www.sommarskog.se/dyn-search-2005.html#IF) –

3

Динамически изменяющиеся поисковые запросы, основанные на данных параметрах, являются сложным предметом и делают это один за другим, даже с очень незначительной разницей, могут иметь серьезные последствия для производительности. Ключ должен использовать индекс, игнорировать компактный код, игнорировать беспокойство о повторении кода, вы должны составить хороший план выполнения запросов (использовать индекс).

Прочтите это и рассмотрите все методы. Ваш лучший метод будет зависеть от ваших параметров, данных, вашей схеме, и вашего фактического использования:

Dynamic Search Conditions in T-SQL by by Erland Sommarskog

+0

К счастью, таблицы, с которыми я работаю, малы. Однако ссылка действительно дает хорошее понимание этой темы. –

+0

@ Лук-Рыцарь, научись правильно делать вещи и всегда делай это так, и когда ваши данные растут, вы будете в хорошей форме. В противном случае у вас будут плохие привычки и медленные запросы при наличии больших таблиц. –

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