日期:2014-05-17  浏览次数:20675 次

sql server 多条件查询语句 出错
@QuestionParentDirection nvarchar(50)=null,
@QuestionChildDirection nvarchar(50)=null,
@QuestionStyle nvarchar(20)=null,
@SourceCompany nvarchar(50)=null,
@QuestionDateA nvarchar(10)=null,
@QuestionDateB nvarchar(10)=null,
@KeyWord nvarchar(50)=null

AS
SELECT QuestionParentDirection,QuestionChildDirection, QuestionStyle, QuestionTitle, QuestionAnswer, SourceCompany, QuestionDate
FROM Question
WHERE (Visibility = 1) 
AND (@QuestionParentDirection is null or RTRIM(QuestionParentDirection) = @QuestionParentDirection)
AND (@QuestionChildDirection is null or RTRIM(QuestionChildDirection)=@QuestionChildDirection) 
AND (@QuestionStyle is null or RTRIM(QuestionStyle) = @QuestionStyle)
AND (@KeyWord is null or (RTRIM(QuestionAnswer) like '%'+@KeyWord+'%' or RTRIM(QuestionTitle) like '%'+@KeyWord+'%'))  
AND (@SourceCompany is null or RTRIM(SourceCompany) = @SourceCompany) 
AND (QuestionDate BETWEEN @QuestionDateA AND @QuestionDateB)
为什么有的语句执行不了呢,没有报错,但是查询不到结果,请大神看看哪不对

------解决方案--------------------
晕,你就给堆代码要人看,业务也不知道,怎么搞啊,你把where中的每个and条件,逐个注销,看看是哪个导致没数据的,语法上没错误。应该就是你的条件没选对或者数据有问题而已
SQL code
SELECT  QuestionParentDirection ,
         QuestionChildDirection ,
         QuestionStyle ,
         QuestionTitle ,
         QuestionAnswer ,
         SourceCompany ,
         QuestionDate
 FROM    Question
 WHERE   ( Visibility = 1 )
         AND ( @QuestionParentDirection IS NULL
               OR RTRIM(QuestionParentDirection) = @QuestionParentDirection
             )
         AND ( @QuestionChildDirection IS NULL
               OR RTRIM(QuestionChildDirection) = @QuestionChildDirection
             )
         AND ( @QuestionStyle IS NULL
               OR RTRIM(QuestionStyle) = @QuestionStyle
             )
         AND ( @KeyWord IS NULL
               OR ( RTRIM(QuestionAnswer) LIKE '%' + @KeyWord + '%'
                    OR RTRIM(QuestionTitle) LIKE '%' + @KeyWord + '%'
                  )
             )
         AND ( @SourceCompany IS NULL
               OR RTRIM(SourceCompany) = @SourceCompany
             )
         AND ( QuestionDate BETWEEN @QuestionDateA
                            AND     @QuestionDateB )

------解决方案--------------------
从最内部的联接查询,或者说从最初的联接查询开始,一步一步看是否有数据。