SQL Server 存储过程的分页_ASP教程-查字典教程网
SQL Server 存储过程的分页
SQL Server 存储过程的分页
发布时间:2016-12-29 来源:查字典编辑
摘要:建立表: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的游标存储过程分页)效率最差,但是最为通用

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

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新ASP教程学习
    热门ASP教程学习
    编程开发子分类