打印本文 打印本文 关闭窗口 关闭窗口
SQLSERVER海量数据库的查询优化及分页算法
作者:武汉SEO闵涛  文章来源:敏韬网  点击数53077  更新时间:2007/11/14 12:58:59  文章录入:mintao  责任编辑:mintao
种分页存储过程,我很后悔没有争先把这段文字改造成存储过程:

CREATE PROCEDURE pagination2
(
 @SQL nVARCHAR(4000),    --
不带排序语句的SQL语句

 @Page int,              --
页码
 @RecsPerPage int,       --
每页容纳的记录数
 @ID VARCHAR(255),       --
需要排序的不重复的ID
 @Sort VARCHAR(255)      --
排序字段及规则
)
AS

DECLARE @Str nVARCHAR(4000)

SET @Str=''''SELECT   TOP ''''+CAST(@RecsPerPage AS VARCHAR(20))+'''' * FROM (''''+@SQL+'''') T WHERE T.''''+@ID+''''NOT IN
(SELECT   TOP ''''+CAST((@RecsPerPage*(@Page-1)) AS VARCHAR(20))+'''' ''''+@ID+'''' FROM (''''+@SQL+'''') T9 ORDER BY ''''+@Sort+'''') ORDER BY ''''+@Sort

PRINT @Str

EXEC sp_ExecuteSql @Str
GO

  其实,以上语句可以简化为:

SELECT TOP 页大小 *

FROM Table1

WHERE (ID NOT IN

          (SELECT TOP 页大小*页数 id

         FROM

         ORDER BY id))

ORDER BY ID

  但这个存储过程有一个致命的缺点,就是它含有NOT IN字样。虽然我可以把它改造为:

SELECT TOP 页大小 *

FROM Table1

WHERE not exists

(select * from (select top (页大小

 << 上一页  [21] [22] [23] [24] [25] [26] [27] [28] [29] [30]  ...  下一页 >> 

打印本文 打印本文 关闭窗口 关闭窗口