SQL SERVER (MSSQL) 如何实现 MySQL 等数

2024-05-11  本文已影响0人  不太纯粹的人

SQL SERVER 本身是没有提供 Limit 这个功能词的。

网络上很多文章都是用 TOP 实现此功能,但是本人完全不推荐大家使用 TOP 来限定。原因有很多,比如:复杂度太高,需要在查询语句前后增加新的语句,使用查询语句长度远远高于其它数据库的语句长度;语法兼容性不好,与其它数据库放置在末尾的形式相比,非常丑陋难用;功能一级残废,在一些复杂的查询中,很难构造出多层级的Limit效果(如 Union),极易报错。

推荐大家使用:Order + Offset + Fetch 的方式实现。

优点是,构造比TOP更简单易用,语法与其它数据库的类似,直接加在末尾即可。缺点是,必须同时使用(非子句可只使用Order),并不像其它数据库那样缺省也能正常查询那样方便。

举个简单的例子:

SELECT netarm_name,netarm_price FROM dbo.netarm ORDER BY netarm_price,netarm_name OFFSET 5 ROWS FETCH NEXT 8 ROWS ONLY;

此处的5和8就是 Limit 的值。

给一个Union的示例:

select * from (select id,userid from dbo.netarm_user where id>20 order by id desc offset 0 rows fetch next 5 rows only) T1 union select * from (select id,userid from dbo.netarm_user where id<10 order by id asc offset 0 rows fetch next 5 rows only) T2 order by id desc offset 0 rows fetch next 10 rows only;

注意,子句中的 order 和 offset fetch 不能单独使用。如果此处使用TOP来实现,主句的 Limit 效果基本上是实现不了的,只能在程序代码中再截取一次。

更多相关用法可自行搜索。

上一篇下一篇

猜你喜欢

热点阅读