Создание предложения T-sQL where для принятия значений NULL - PullRequest
2 голосов
/ 18 апреля 2011

Сейчас я разрабатываю хранимый процесс, который принимает 3 входных параметра.Но проблема в том, что клиенту не нужно вводить ни один из этих параметров;вместо этого они могут иметь эти 3 как нули.Как я могу записать это в предложение WHERE?

псевдокод выглядит примерно так:

WHERE (@p1 = a.p1 or @p1 = '') 
and (@p2 = a.p2 or @p2 = '') 
and (@p2 = a.p2 or @p2 = '')

Приведенная выше логика работает, когда они выбирают все 3 параметра, но в противном случае возвращает 0 записей.

Ответы [ 3 ]

4 голосов
/ 18 апреля 2011

Похоже, вы проверяете пустую / пустую строку (что означает «пропустить это»).Если переменная также имеет значение NULL, возможно, используйте ISNULL(x,''), чтобы принудительно преобразовать пустой аргумент в пустую строку.

 WHERE (@p1 = a.p1 or ISNULL(@p1,'') = '')
 AND (@p2 = a.p2   or ISNULL(@p2,'') = '') 
 AND (@p2 = a.p2   or ISNULL(@p2,'') = '')
1 голос
/ 18 апреля 2011

вы должны изменить запрос на что-то вроде этого:

WHERE (a.p1 = IsNull(NullIf(@p1, ''), a.p1))  
  and (a.p2 = IsNull(NullIf(@p2, ''), a.p2))
  and (a.p3 = IsNull(NullIf(@p3, ''), a.p3))
1 голос
/ 18 апреля 2011

Попробуйте это:

  WHERE (@p1 = a.p1 or @p1 = '' OR @p1 IS NULL) 
    AND (@p2 = a.p2 or @p2 = '' OR @p2 IS NULL) 
    AND (@p2 = a.p2 or @p2 = '' OR @p3 IS NULL)
...