Условная проверка в пункте Где - PullRequest
2 голосов
/ 10 августа 2010

У меня есть процедура, в которой приведенное ниже условие должно быть записано в предложении WHERE. Как мне это сделать.

itemid - это параметр, который может быть нулевым.

если itemid доступен, добавьте его в мое предложение where, иначе ничего не делайте

Ответы [ 2 ]

3 голосов
/ 10 августа 2010

Некоторые люди используют эту технику

... WHERE @itemid IS NULL OR tbl.itemid = @itemid

Тем не менее, это гарантирует, что вы никогда не получите индексный поиск по столбцу itemid.разделить запрос на 2 отдельных случая

IF(@itemid IS NULL)
  SELECT foo FROM bar
ELSE
  SELECT foo FROM bar WHERE itemid = @itemid

Если число комбинаций слишком велико, вы можете рассмотреть динамический SQL.Сначала убедитесь, что вы понимаете внедрение SQL.

Ссылка: Условия динамического поиска в T-SQL

2 голосов
/ 10 августа 2010

например

SELECT Something
FROM SomeTable
WHERE (@MyParam IS NULL OR SomeField = @MyParam)
    AND AnotherField = 1

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

IF ( @MyParam IS NULL )
    SELECT Something
    FROM SomeTable
    WHERE AnotherField = 1
ELSE
    SELECT Something
    FROM SomeTable
    WHERE SomeField = @MyParam 
        AND AnotherField = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...