zoukankan      html  css  js  c++  java
  • 今天说一下Top ~

    Top这个关键字,大家都不陌生~尤其是很多时候打开SSMS的时候右键表名,选择前1000行的时候,就可以见到编译出来的语句 Select top 1000 XXX from XXX

    好~我们先看看Top 的语法

    [ 
        TOP (expression) [PERCENT]
        [ WITH TIES ]
    ]
    Top 关键字支持实际行数 Top 50 查询前50行,使用这种模式的话,Top 后面必须跟一个整数(传入浮点是会报错的)
    或者使用 Top 10 PERCENT 查询前10%的数据,使用这种方法的话,Top 后面可以跟一个浮点,但是会向上取整。
    WITH TIES 的选项则表示是否将与最后一行排序一样的行显示出来。使用这个选项将有可能得出超出 Top 关键字之后所写入的数量。

    对于select 这个是控制返回多少行数据,而对于insert ,update ,delete,merge的话,则是控制要操作多少行的数据。
    官方文档说建议使用Top的时候始终配合Order By来使用。我的理解是这样纸的。
    有一个语句
    select top 5 AA,BB,CC
        from Tablea
    这种Top 是随机排序的,随机的依据取决于当时的查询计划是怎么执行,如果没有使用Order By的话,有可能当数据量有所变化,那就会出现不同的结果。
    所以如果需要一个稳定的结果,那么建议如果使用Top关键字,那么后面就配套一个Order By 结果才稳定

    Select :
    Select top (50) * from Table --里面的50可以是支持使用变量来传值

    Insert
    Insert 的用法主要使用
    insert top (5) into table (XXX) values (XXX) --这里面的顺序与Values 后面跟的顺序一致
    如果用Insert Select 的时候,则与Select 的Top 用法一致

    Update /Delete /Merge :
    Update/Delete Top (50)

    如果使用此方式,那么将会是随机更新/删除,也有可能引起预想不到的结果。然而Update/Delete 却是不支持Order by的。
    如果需要稳定的排序,可以采取子查询先把需要更新/删除的结果集查询出来。

    update a set XX=AA
      from (select top 5 * from table order by BBB) a

    可以考虑这种处理方法。

    PS:另外我觉得Top 这个关键字有一个比较好的应用场景,就是当需要一次性处理大量数据的时候,可以借助Top关键字来分批处理。避免因为一次处理过量的数据引起大量的事务日志。也比较安全











  • 相关阅读:
    asp.net文件上传
    给图片添加水印效果图的函数(可以在图片上添加自己的版权和LOGO图片的水印)
    DataGrid实现tooltip功能
    DataList编辑、更新、取消、删除、分页(分页控件AspNetPager.dll)
    SQL Server 中千分位格式化输出[转载]
    利用ASP.NET的三种缓存提高站点性能
    带Checkbox的TreeView(一) 完美兼容IE、Firefox ,在js中添加了getCurrentNode(evt)方法,注册方法变为TreeView1.Attributes.Add("onclick", "CheckEvent
    带checkbox的TreeView(二)
    经典blog
    六类UML图
  • 原文地址:https://www.cnblogs.com/Gin-23333/p/5135774.html
Copyright © 2011-2022 走看看