微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果else转换为SQL Server中的and或,则为

如何解决如果else转换为SQL Server中的and或,则为

| 我正在转换此查询
WHERE (Worksheet.ProjectId = \' +  CONVERT(VARCHAR(10),@ProjectId) + \')

    IF(@StatusTypeId IS NULL)
    BEGIN
        SET @WhereClause = \' AND StatusType.StatusTypeId IS NULL\'
    END
    ELSE IF (@StatusTypeId > 0)
    BEGIN
        SET @WhereClause = \' AND StatusType.StatusTypeId = \' + CONVERT(VARCHAR(10),@StatusTypeId)
    END
有了这个
WHERE Worksheet.ProjectId = @ProjectId
AND
((@StatusTypeId IS NULL AND StatusType.StatusTypeId IS NULL)
OR (@StatusTypeId > 0 AND StatusType.StatusTypeId = @StatusTypeId))
这有什么问题。当我只给出@ProjectId时,它不显示任何行,但显示行记录,但当我同时给出两个参数值时,表示projectId和statusTypeId可以正常工作。 谢谢。     

解决方法

        此代码...
IF(@StatusTypeId IS NULL)
BEGIN
    SET @WhereClause = \' AND StatusType.StatusTypeId IS NULL\'
END
..具有隐式ELSE
ELSE --@StatusTypeId IS NOT NULL
    SET ... is something always true because no condition dynamically added
您错过了这个隐含的\“ @ StatusTypeId始终为true的情况\” 其他条件也一样
WHERE Worksheet.ProjectId = @ProjectId
AND
(
  (@StatusTypeId IS NOT NULL OR
         (@StatusTypeId IS NULL AND StatusType.StatusTypeId IS NULL)
  )
  OR
  (@StatusTypeId <= 0 OR
         (@StatusTypeId > 0 AND StatusType.StatusTypeId = @StatusTypeId)
  )
)
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。