Как настроить предложение WHERE для выбора всех записей при передаче значения NULL в качестве параметра в операторе SQL - PullRequest
1 голос
/ 08 марта 2019

Если @reasonID = 1, мне нужно выбрать только те политики, у которых причина ID = 211

Если @reasonID = 2, мне нужно выбрать только те политики, у которых есть причина <<211 </p>

Если @reasonID = NULL Мне нужно выбрать все политики, включая NULL

. В приведенном ниже примере это работает для @reasonID = 1 и @reasonID = 2.

Но как я могу настроить выражение WHERE длявыбрать все строки, когда @reasonID = NULL?

      declare @TempTable table (PolicyNumber varchar(50), reasonID int)
        insert into @TempTable values ('Pol1', 5),
                                      ('Pol2', NULL),
                                      ('Pol3', 211),
                                      ('Pol4', 8),
                                      ('Pol5', 211),
                                      ('Pol6', NULL)

   --input @reasonID parameter     
  declare @reasonID int = 2
  select PolicyNumber,reasonID
  from @TempTable
  where 
    (case when reasonID = 211 then 1 else 2 end = @reasonID) --works fine
    OR (@reasonID = NULL)          --does not work

1 Ответ

6 голосов
/ 08 марта 2019

Вы используете IS NULL, а не = NULL.

Ваша последняя строка должна быть:

OR (@reasonID IS NULL) 

И, если вы когда-нибудь захотите сделать обратное, синтаксис будет IS NOT NULL.

...