手机
当前位置:查字典教程网 >编程开发 >ASP教程 >SQL Server 存储过程的分页
SQL Server 存储过程的分页
摘要:建立表:CREATETABLE[TestTable]([ID][int]IDENTITY(1,1)NOTNULL,[FirstName][n...

建立表:

CREATETABLE[TestTable](

[ID][int]IDENTITY(1,1)NOTNULL,

[FirstName][nvarchar](100)COLLATEChinese_PRC_CI_ASNULL,

[LastName][nvarchar](100)COLLATEChinese_PRC_CI_ASNULL,

[Country][nvarchar](50)COLLATEChinese_PRC_CI_ASNULL,

[Note][nvarchar](2000)COLLATEChinese_PRC_CI_ASNULL

)ON[PRIMARY]

GO

插入数据:(2万条,用更多的数据测试会明显一些)

SETIDENTITY_INSERTTestTableON

declare@iint

set@i=1

while@i<=20000

begin

insertintoTestTable([id],FirstName,LastName,Country,Note)values(@i,''FirstName_XXX'',''LastName_XXX'',''Country_XXX'',''Note_XXX'')

set@i=@i+1

end

SETIDENTITY_INSERTTestTableOFF

-------------------------------------

分页方案一:(利用NotIn和SELECTTOP分页)

语句形式:

SELECTTOP10*

FROMTestTable

WHERE(IDNOTIN

(SELECTTOP20id

FROMTestTable

ORDERBYid))

ORDERBYID

SELECTTOP页大小*

FROMTestTable

WHERE(IDNOTIN

(SELECTTOP页大小*页数id

FROM表

ORDERBYid))

ORDERBYID

-------------------------------------

分页方案二:(利用ID大于多少和SELECTTOP分页)

语句形式:

SELECTTOP10*

FROMTestTable

WHERE(ID>

(SELECTMAX(id)

FROM(SELECTTOP20id

FROMTestTable

ORDERBYid)AST))

ORDERBYID

SELECTTOP页大小*

FROMTestTable

WHERE(ID>

(SELECTMAX(id)

FROM(SELECTTOP页大小*页数id

FROM表

ORDERBYid)AST))

ORDERBYID

-------------------------------------

分页方案三:(利用SQL的游标存储过程分页)

createprocedureXiaoZhengGe

@sqlstrnvarchar(4000),--查询字符串

@currentpageint,--第N页

@pagesizeint--每页行数

as

setnocounton

declare@P1int,--P1是游标的id

@rowcountint

execsp_cursoropen@P1output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcountoutput

selectceiling(1.0*@rowcount/@pagesize)as总页数--,@rowcountas总行数,@currentpageas当前页

set@currentpage=(@currentpage-1)*@pagesize+1

execsp_cursorfetch@P1,16,@currentpage,@pagesize

execsp_cursorclose@P1

setnocountoff

其它的方案:如果没有主键,可以用临时表,也可以用方案三做,但是效率会低。

建议优化的时候,加上主键和索引,查询效率会提高。

通过SQL查询分析器,显示比较:我的结论是:

分页方案二:(利用ID大于多少和SELECTTOP分页)效率最高,需要拼接SQL语句

分页方案一:(利用NotIn和SELECTTOP分页)效率次之,需要拼接SQL语句

分页方案三:(利用SQL的游标存储过程分页)效率最差,但是最为通用

在实际情况中,要具体分析。

【SQL Server 存储过程的分页】相关文章:

存储过程里的递归 实现方法

各种存储过程使用指南

SQL Server两种分页的存储过程使用介绍

Access中使用Create Procedure创建存储过程第1/2页

关于使用存储过程创建分页

ASP调用SQL SERVER存储程序

以前写的一个分页存储过程,刚才不小心翻出来的

结合asp和存储过程做的搜索程序

创力采集程序用到的函数 推荐第1/3页

SQL Server的通用分页存储过程 未使用游标,速度更快!

精品推荐
分类导航