SQL Server存储过程条件查询:@IdParameter>0时匹配表Id字段
解决SQL Server存储过程条件查询问题
你原来用CASE的写法不对,因为CASE是表达式,得返回具体值,不能直接在THEN里写Id = @Parameter这种条件判断。给你两种可行的写法:
方法一:逻辑表达式组合(推荐)
直接用OR把两种情况整合到WHERE条件里,逻辑清晰又简洁:
SELECT * FROM TABLE_NAME WHERE [Status] = 1 AND (@IdParameter <= 0 OR Id = @IdParameter)
原理很简单:当@IdParameter小于等于0时,@IdParameter <= 0为真,这部分条件直接通过,相当于忽略Id匹配;当@IdParameter大于0时,@IdParameter <= 0为假,就会去判断Id = @IdParameter,实现精准匹配。
方法二:IF分支写法
如果更习惯分情况处理,也可以用IF-ELSE分支分别写查询语句:
IF @IdParameter > 0 BEGIN SELECT * FROM TABLE_NAME WHERE [Status] = 1 AND Id = @IdParameter END ELSE BEGIN SELECT * FROM TABLE_NAME WHERE [Status] = 1 END
这种写法分两次写查询,适合对性能有极致要求的场景,但代码量会稍多一点。
内容的提问来源于stack exchange,提问作者Gulfam
相关产品推荐
相关产品推荐

