三种SQL分页方式
1.分页方案一:(利用Not In和SELECT TOP分页)
语句形式:
SELECTTOP10*fromTestTableWHERE(IDNOTIN (SELECTTOP20id fromTestTable ORDERBYid))ORDERBYIDSELECTTOP页大小*fromTestTableWHERE(IDNOTIN (SELECTTOP页大小*页数id from表 ORDERBYid))ORDERBYID
2.分页方案二:(利用ID大于多少和SELECT TOP分页)
语句形式:
SELECTTOP10*fromTestTableWHERE(ID> (SELECTMAX(id) from(SELECTTOP20id fromTestTable ORDERBYid)AST))ORDERBYIDSELECTTOP页大小*fromTestTableWHERE(ID> (SELECTMAX(id) from(SELECTTOP页大小*页数id from表 ORDERBYid)AST))ORDERBYID
3.分页方案三:(利用SQL的游标存储过程分页)
create procedureSqlPager@sqlstrnvarchar(4000),--查询字符串@currentpageint,--第N页@pagesizeint--每页行数assetnocountondeclare@P1int,--P1是游标的id@rowcountintexecsp_cursoropen@P1output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcountoutputselectceiling(1.0*@rowcount/@pagesize)as总页数--,@rowcountas总行数,@currentpageas当前页set@currentpage=(@currentpage-1)*@pagesize+1execsp_cursorfetch@P1,16,@currentpage,@pagesizeexecsp_cursorclose@P1setnocountoff
其它的方案:如果没有主键,可以用临时表,也可以用方案三做,但是效率会低。
建议优化的时候,加上主键和索引,查询效率会提高。
通过SQL 查询分析器,显示比较:我的结论是:
分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句,第一页不可用 select top 0
分页方案一:(利用Not In和SELECT TOP分页) 效率次之,需要拼接SQL语句
分页方案三:(利用SQL的游标存储过程分页) 效率最差,但是最为通用
相关文档:
游标是从数据库中提取出来的数据,以临时表的形式存放在内存中,在游标中有一个数据指针,在初始状态下指向首记录, 利用fetch语句移动该指针,从而对游标中的数据进行各种操作。
1.定义游标
cursor 游标名 is select语句;
2.打开游标
open 游标名;
3.提取游标数据
fetch 游标名 into 变量名1, 变量名2, ....;
或
......
What is SQL*Plus and where does it come from?
SQL*Plus is a command line SQL and PL/SQL language interface and reporting tool that ships with the Oracle Database Client and Server software. It can be used interactively or driven from scripts. SQL*Plus is frequently used by DBAs and Developers ......
1
、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断
select
*
from
people
where
peopleId
in
(
select
peopleId
from
people
group
by
peopleId
having
cou ......
一、 建立一个安全抽象层
我们并不建议你手工地把前面介绍的技术应用于每一个用户输入的实例中,而是强烈推荐你为此创建一个抽象层。一个简单的抽象是把你的校验方案加入到一个函数中,并且针对用户输入的每一项调用这个函数。当然,我们还可以创建一种更复杂的更高一级的抽象-把一个安全的查询封装到一个类中,从而应 ......