SQL查询无法正常工作

时间:2011-03-08 10:19:38

标签: sql sql-server tsql

有一个表类别(ID,标题,描述,parentID,friendlyUrl,categoryTypeID)。 字段值parentID可以为null。

如果@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 =指定的int值(它是正确的),此查询将选择所有具有parentID = @ ParentID的行。

但是如果@ParentID = null,它会选择所有行(它不对)。

2 个答案:

答案 0 :(得分:4)

您的错误在这里:

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

当@ParentID == null时,该等式的第一部分为真,并且由于OR语句,布尔逻辑的第二部分不再重要并被忽略。

这就是AdaTheDev的答案适用于@ID For @ParentID的原因:

and ((@ParentID is null AND ParentID is null) or (@ParentID not is null AND ParentID = @parentID))

答案 1 :(得分:1)

这个怎么样......或者我没有正确理解你的问题?

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