大于SQL CASE语句

前端之家收集整理的这篇文章主要介绍了大于SQL CASE语句前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我很难想出比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)提示可能会有助于在单行情况下执行性能.

原文链接:https://www.f2er.com/mssql/81731.html

猜你在找的MsSQL相关文章