传递任一参数时SQL Server的语法

时间:2009-11-24 21:39:39

标签: sql sql-server

如果其中一个参数传递/或两者都传递了如何将其与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子句中编写。

感谢

4 个答案:

答案 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)

这应该做你想要的