首页 > 数据库技术 > 详细

SQLServer的一些小点

时间:2019-06-28 13:06:06      阅读:102      评论:0      收藏:0      [点我收藏+]

单条SQL语句是具有原子性的,即本身就是一个事务,读取时为共享锁,更新时为更新锁。(不知道复合语句的情况)

SQLServer 使用的分页查询语句如下(本人使用2014版)

use BookDB
Select * from (select * ,row_number() over(order by bookNo) as line from Book ) as t where t.line>=5 and t.line<=8

其中bookNo是列名,Book是表

显示的结果如下

技术分享图片

 

其中的注意 函数“row_number”必须有 OVER 子句。 其中row_number() over(order by bookNo)的意思是按照bookNo的顺序依次返回一个数字,从1开始。

然后将其重命名为line,这个line是自己启动新分组的名字。再将整体作为新表t,供外层select使用。

还可以这样 row_number() over (partition by column1 order by column2) 

表示先分组在排序,这时候的t.line表示的是组内的排序值,即在一个组内是依次排序,但不同的组互不影响,每个组都是从1开始排序

显示的结果如下

技术分享图片

 我的使用

  @Override
    public List<Orders> findAllByStatus(String status, Integer currentPages, Integer rows) throws Exception {
        List<Orders> all = new ArrayList<Orders>();
        String sql = "Select * from (select *,row_number() over(order by o_id) as lines from orders where status = ?) as pages "
                + "where pages.lines>=? and pages.lines<=?";
        Integer start = (currentPages-1)*rows+1;      //分页起始值
        Integer end = currentPages*rows;            //结束 值
        this.pstmt = this.conn.prepareStatement(sql);
        this.pstmt.setString(1, status);
        this.pstmt.setInt(2, start);
        this.pstmt.setInt(3, end);
        ResultSet rs = this.pstmt.executeQuery();
        while(rs.next()) {
            Orders order = new Orders();
            order.setO_id(rs.getInt(1));
            order.setC_id(rs.getString(2));
            order.setTime(rs.getTimestamp(3));
            order.setTotal(rs.getDouble(4));
            order.setStatus(rs.getString(5));
            order.setS_name(rs.getString(6));
            order.setS_phone(rs.getString(7));
            all.add(order);
        }
        return all;
    }

还有一个是返回自增函数的自增值

    @Override
    public Integer create(Orders pojo) throws Exception {
        String sql = "insert into orders values (?, ?, ?, ?, ?, ?) select  SCOPE_IDENTITY()";   //select SCOPE_IDENTITY()是关键
        this.pstmt = this.conn.prepareStatement(sql);
        this.pstmt.setString(1, pojo.getC_id());
        this.pstmt.setTimestamp(2, pojo.getTime());
        this.pstmt.setDouble(3, pojo.getTotal());
        this.pstmt.setString(4, pojo.getStatus());
        this.pstmt.setString(5, pojo.getS_name());
        this.pstmt.setString(6, pojo.getS_phone());
        this.pstmt.executeUpdate();
        ResultSet rs = this.pstmt.getGeneratedKeys();    //这里是获取的地方
        if(rs.next()) {
            return rs.getInt(1);
        }else {
            return -1;
        }
    }

 

SQLServer的一些小点

原文:https://www.cnblogs.com/ant-xu/p/11101847.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!