问题描述
|
我正在转换此查询
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)
)
)