如果其中一个参数传递/或两者都传递了如何将其与WHERE子句中的单个列匹配。
如果两者都通过,则应该只使用第一个结果设置结果,然后使用第二个结果。
例如:
--either will be passed
declare @processStepID int = null
declare @PROCESS_StepID int = null
if(@processStepID is null)
select * from CTL.CTRL.CTRL_PROCESS_STEP_ACTIVITIES
where PROCESS_STEP_ID = @PROCESS_StepID
else
select * from CTL.CTRL.CTRL_PROCESS_STEP_ACTIVITIES
where PROCESS_STEP_ID = @processStepID
如何在不使用if语句的where子句中编写。
感谢
答案 0 :(得分:3)
WHERE PROCESS_STEP_ID = coalesce( @processStepID, @PROCESS_StepID )
答案 1 :(得分:1)
使用ISNULL功能
SELECT *
FROM CTL.CTRL.CTRL_PROCESS_STEP_ACTIVITIES
WHERE PROCESS_STEP_ID = ISNULL( @processStepID, @PROCESS_StepID )
答案 2 :(得分:0)
select * from CTL.CTRL.CTRL_PROCESS_STEP_ACTIVITIES
where (PROCESS_STEP_ID = @PROCESS_StepID) OR (PROCESS_STEP_ID = @processStepID)
似乎太明显了。我错过了什么?
答案 3 :(得分:0)
select *
from CTL.CTRL.CTRL_PROCESS_STEP_ACTIVITIES
where PROCESS_STEP_ID = ISNULL(@PROCESS_StepID,@processStepID)
这应该做你想要的