加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

大于SQL CASE语句

发布时间:2020-12-12 16:39:22 所属栏目:MsSql教程 来源:网络整理
导读:我很难想出比SQL语句更大的一个. 这是我的代码: select one,two three from orderswhere case when @orderid 0 then orders.orderid = @orderid end @orderid是传递给存储过程的参数.这个想法是,如果传递了一个有效的( 0)orderid,那么在where子句中使用它作
我很难想出比SQL语句更大的一个.

这是我的代码:

select one,two three from orders
where case when @orderid > 0 then orders.orderid = @orderid end

@orderid是传递给存储过程的参数.这个想法是,如果传递了一个有效的(> 0)orderid,那么在where子句中使用它作为过滤器,否则不要全部使用它.

解决方法

Guffa有正确的答案,但是使用CASE技巧(偶尔会派上用场)的方式是这样的:
--If order ID is greater than 0,use it for selection
--otherwise return all of the orders.
select one,two,three
from orders
where orders.orderid = CASE
    WHEN @orderid > 0 then @orderid
    ELSE orders.orderid
END

CASE总是必须返回一些东西,所以如果你想有条件地“禁用”你的WHERE子句中的一个语句,不能使用OR,你可以将这个事情设置为与自己相同,并且应该始终为true(除非比较null ).

编辑:我也应该说,对于这样的查询,可以返回的行数可能会有很大的变化(一行与整个表),使用OPTION(RECOMPILE)提示可能会有助于在单行情况下执行性能.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读