sqlserver分頁

 

  1. EXEC UP_SplitPages 'select RID,user_id,user_name,balance,user_state,
  2. CONVERT(varchar(30),reg_time,11)+'' ''+CONVERT(varchar(30),reg_time,8) as reg_time,CONVERT(varchar(30),paid_time,11)+'' ''+CONVERT(varchar(30),paid_time,8) as paid_time,pay_type,user_grade,num_type,num_grade,numrent_type,agent_no,CONVERT(varchar(30),pause_time,11)+'' ''+CONVERT(varchar(30),pause_time,8) as pause_time from VIEW_UserInfo with (nolock) where 1=1','reg_time DESC',1 ,100, 0  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10. CREATE  PROCEDURE UP_SplitPages 
  11.     @SqlQuery NVARCHAR(4000), --查詢字符串 
  12.     @OrderFieldName  VARCHAR(100),  --按該列爲關鍵字來進行排序分頁 
  13.     @CurrentPage INT,--第N頁 (如果是 0  則讀取 最後 一頁的記錄  ) 
  14.     @PageSize INT,--每頁行數 
  15.     @OrderType   INT      
  16.  
  17. AS 
  18.  
  19. DECLARE @sql NVARCHAR(4000) 
  20. DECLARE @tPageCount INT 
  21.  
  22. IF len(@OrderFieldName)>3 
  23.     SET @sql= @SqlQuery + '  ORDER BY  '+@OrderFieldName 
  24. ELSE 
  25.              SET @sql= @SqlQuery 
  26.      
  27.  
  28. BEGIN 
  29.     SET NOCOUNT ON 
  30.     
  31.     DECLARE @P1 INT--P1是遊標的id 
  32.     DECLARE @rowcount INT 
  33.  
  34.             
  35.  
  36.      
  37.     EXEC sp_cursoropen @P1 OUTPUT,@sql,@scrollopt=1,@ccopt=1,@rowcount=@rowcount OUTPUT 
  38.  
  39.             SELECT  @rowcount AS RowsCount,@CurrentPage AS CurrentPage   
  40.  
  41.     SET  @tPageCount = CEILING(1.0*@rowcount/@PageSize) 
  42.  
  43.     IF @CurrentPage = 0  
  44.         SET  @CurrentPage = @tPageCount-- @PageIndex = 0 表示在調用時,是首次查詢,先讀取 最後 一頁的記錄   
  45.  
  46.     SET @CurrentPage=(@CurrentPage-1)*@PageSize+1 
  47.  
  48.  
  49.     EXEC sp_cursorfetch @P1,16,@CurrentPage,@PageSize  
  50.     EXEC sp_cursorclose @P1 
  51.  
  52.     --SELECT  @tPageCount AS PagesCount ,@rowcount AS RowsCount,@CurrentPage AS CurrentPage   
  53.         SET NOCOUNT OFF 
  54. END 
  55.  
  56. GO 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章