SQL запрос с предложением where, имеющим значение NULL и регистр - PullRequest
0 голосов
/ 12 сентября 2018
DECLARE @AuditTypeID BIGINT=NULL
DECLARE @ChecklistTypeID BIGINT = NULL


SELECT * FROM TmpChecklist WHERE ChecklistTypeID IN 
          (CASE WHEN (@AuditTypeID IS NOT NULL) THEN (select distinct ChecklistTypeID from TmpChecklist where checklistTypeID IN 
                (SELECT checklistTypeID FROM TmpChecklist WHERE AudittypeID=@AuditTypeID AND (@ChecklistTypeID IS NULL OR @ChecklistTypeID = '') 
                UNION SELECT @ChecklistTypeID))
                ELSE
                (SELECT DISTINCT checklistTypeID FROM TmpChecklist WHERE checklistTypeID IN (ISNULL(@checklistTypeID,checklistTypeID) ))
          END)

Здесь обе переменные могут быть нулевыми, либо могут быть нулевыми, либо обе могут быть ненулевыми

Так что, если @AuditTypeID не равно нулю, то я хочу выбрать ChecklistTypeID на основе @AuditTypeID, в противном случае выберите все ChecklistTypeID (опять же, если @ChecklistTypeID равно нулю, выберите все ChecklistTypeID, в противном случае на основе @ChecklistTypeID )

Я пробовал запрос выше, но что-то не так.

Как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Я думаю, что логика, которую вы хотите, немного проще, чем то, что вы делаете:

SELECT cl.*
FROM TmpChecklist cl
WHERE (@AuditTypeID IS NULL OR cl.AudittypeID = @AuditTypeID) AND
      (@ChecklistTypeID IS NULL OR cl.ChecklistTypeID = @ChecklistTypeID);
0 голосов
/ 12 сентября 2018

вы не можете использовать case в предложении where, вы можете написать свой запрос как показано ниже:

DECLARE @AuditTypeID BIGINT=NULL
DECLARE @ChecklistTypeID BIGINT = NULL


SELECT * FROM TmpChecklist WHERE  (@AuditTypeID IS NOT NULL and
ChecklistTypeID IN  
(select distinct ChecklistTypeID from TmpChecklist where 
 checklistTypeID IN 
                (SELECT checklistTypeID FROM TmpChecklist WHERE AudittypeID=@AuditTypeID
                                        AND (@ChecklistTypeID IS NULL OR @ChecklistTypeID = '') 
                UNION SELECT @ChecklistTypeID)
))
                OR
ChecklistTypeID in
                (SELECT DISTINCT checklistTypeID FROM TmpChecklist WHERE checklistTypeID IN coalesce(@checklistTypeID,checklistTypeID))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...