美文网首页
SQL SERVER (MSSQL) 如何实现 MySQL 等数

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

作者: 不太纯粹的人 | 来源:发表于2024-05-11 11:34 被阅读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 效果基本上是实现不了的,只能在程序代码中再截取一次。

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

    相关文章

      网友评论

          本文标题:SQL SERVER (MSSQL) 如何实现 MySQL 等数

          本文链接:https://www.haomeiwen.com/subject/hxcyfjtx.html