SQL-запрос не работает должным образом - PullRequest
0 голосов
/ 08 марта 2011

Есть таблица Category (ID, заголовок, описание, parentID, friendlyUrl, categoryTypeID). Значение поля parentID может быть нулевым.

Как выбрать строки, которые имеют только parentID = null, если @ParentID = null.

  declare @ID int =null 
  declare @FriendlyUrl nvarchar(30) = null 
  declare @ParentID int = null 
  declare @CategoryTypeID int = 0


    select * from Category
     where
    (@ID is null or ID = @ID) 
    and (@FriendlyUrl is null or FriendlyUrl=@FriendlyUrl)
    and (@ParentID is null or ParentID=@ParentID) 
    and (@CategoryTypeID is null or CategoryTypeID=@CategoryTypeID)

Этот запрос выбирает все строки, у которых parentID = @ ParentID, если @ParentID = указанное значение int (это правильно).

Но если @ParentID = null, он выбирает все строки (это неправильно).

Ответы [ 2 ]

4 голосов
/ 08 марта 2011

Ваша ошибка здесь:

and (@ParentID is null or ParentID=@ParentID) 

Когда @ParentID == null, первая часть этого равенства равна true, а из-за оператора OR вторая часть логической логики больше не важна и игнорируется..

По этой причине ответ AdaTheDev будет работать для @ID. Для @ParentID вам необходимо:

and ((@ParentID is null AND ParentID is null) or (@ParentID not is null AND ParentID = @parentID))
1 голос
/ 08 марта 2011

Как насчет этого ... или я не правильно понял ваш вопрос?

select * from Category<br> where (@ID is null or ID = @ID)<br> and (@FriendlyUrl is null or FriendlyUrl=@FriendlyUrl)<br> and (NOT(@ParentID is null) or ParentID=@ParentID) ' added NOT here and (@CategoryTypeID is null or CategoryTypeID=@CategoryTypeID)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...