分页方法比较

CREATE   TABLE   [ TestTable ]  (
 
[ ID ]   [ int ]   IDENTITY  ( 1 1 NOT   NULL  ,
 
[ FirstName ]   [ nvarchar ]  ( 100 ) COLLATE Chinese_PRC_CI_AS  NULL  ,
 
[ LastName ]   [ nvarchar ]  ( 100 ) COLLATE Chinese_PRC_CI_AS  NULL  ,
 
[ Country ]   [ nvarchar ]  ( 50 ) COLLATE Chinese_PRC_CI_AS  NULL  ,
 
[ Note ]   [ nvarchar ]  ( 2000 ) COLLATE Chinese_PRC_CI_AS  NULL  
ON   [ PRIMARY ]
GO

 

插入数据:(100万条)

SET   IDENTITY_INSERT  TestTable  ON
declare  @i  int
set  @i = 1
while  @i <= 1000000
begin
    
insert   into  TestTable( [ id ] , FirstName, LastName, Country,Note)  values (@i,  ' FirstName_XXX ' , ' LastName_XXX ' , ' Country_XXX ' , ' Note_XXX ' )
    
set  @i = @i + 1
end
SET   IDENTITY_INSERT  TestTable  OFF


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

分页方案一:(利用Not In和SELECT TOP分页)
语句形式:

SELECT   TOP  页大小  *
FROM  TestTable
WHERE  (ID  NOT   IN
          (
SELECT   TOP  页大小 * 页数 id
         
FROM  表
         
ORDER   BY  id))
ORDER   BY  ID


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

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

SELECT   TOP  页大小  *
FROM  TestTable
WHERE  (ID  >
          (
SELECT   MAX (id)
         
FROM  ( SELECT   TOP  页大小 * 页数 id
                 
FROM  表
                 
ORDER   BY  id)  AS  T))
ORDER   BY  ID


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

create    procedure  XiaoZhengGe
@sqlstr 
nvarchar ( 4000 ),  -- 查询字符串
@currentpage  int -- 第N页
@pagesize  int   -- 每页行数
as
set  nocount  on
declare  @P1  int -- P1是游标的id
 @rowcount  int
exec  sp_cursoropen @P1 output,@sqlstr,@scrollopt = 1 ,@ccopt = 1 ,@rowcount = @rowcount output
select   ceiling ( 1.0 * @rowcount / @pagesize)  as  总页数 -- ,@rowcount as 总行数,@currentpage as 当前页 
set  @currentpage = (@currentpage - 1 ) * @pagesize + 1
exec  sp_cursorfetch @P1, 16 ,@currentpage,@pagesize 
exec  sp_cursorclose @P1
set  nocount  off

你可能感兴趣的:(sql,Go)