程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 實現千萬級數據的分頁的通用存儲過程

實現千萬級數據的分頁的通用存儲過程

編輯:關於SqlServer
01 set ANSI_NULLS ON 02 set QUOTED_IDENTIFIER ON 03 go 04    05 /*  06 功能描述: 通用分頁顯示查詢  07 如果有自增標識字段,在@strGetFIElds中不要加入此字段信息,  08 如果非要加入的話,要 (fldName + 0) AS fldName 這樣處理;  09 輸入參數:  10 @tblName: 表名  11 @strGetFIElds: 需要返回的列 '*':返回所以列信息  12 @PageSize: 頁尺寸  13 @PageIndex: 頁碼  14 @doCount: 返回記錄總數, 非 0 值則返回  15 @strOrderBy: 排序字段信息,(注意: 不要加 ORDER BY 16 格式: FIEld1 DESC, FIEld2 ASC  17 @strWhere: 查詢條件,(注意: 不要加 WHERE 18 輸出參數: @RecordCount: 記錄總數  19 作 者: Nestcn  20 創建時間: 2010-03-09  21 更改紀錄:  22 */  23 ALTER PROCEDURE [dbo].[MyPagination]  24 25 @tblName varchar(255),  26 @strGetFIElds varchar(1000) = '*' 27 @PageSize int = 10,  28 @PageIndex int = 1,  29 @doCount bit = 0,  30 @strOrderBy varchar(500) = '' 31 @strWhere varchar(1500) = '' 32 @RecordCount int output  33 34 AS  35 -- 主語句  36 DECLARE @strSQL varchar(5000) SET @strSQL = ''  37 -- 排序變量  38 DECLARE @strOrder varchar(400) SET @strOrder = ''  39    40 SET @RecordCount = 0  41 --如果@doCount傳遞過來的不是0,就執行總數統計  42 IF (@doCount != 0)  43 BEGIN  44 DECLARE @sWhere varchar(2000)  45    46 SET @sWhere = ''  47 IF (@strWhere != '' 48 SET @sWhere = ' WHERE ' + @strWhere  49    50 SET @strSQL = 'if exists (select * from dbo.sysobjects where id = object_id(''[dbo].[tmpTable]'') and OBJECTPROPERTY(id, ''IsUserTable'') = 1) '  51 SET @strSQL = @strSQL + ' UPDATE tmpTable SET Total = (SELECT COUNT(*) FROM [' + @tblName + '] ' + @sWhere + ') '  52 SET @strSQL = @strSQL + ' ELSE SELECT COUNT(*) AS Total INTO tmpTable FROM [' + @tblName + '] ' + @sWhere  53    54 EXEC (@strSQL)  55    56 SELECT @RecordCount=Total FROM tmpTable  57    58 --刪除總數統計臨時表  59 EXEC ('DROP TABLE tmpTable' 60 END  61    62 PRINT @RecordCount  63    64 --排序字段信息  65 IF (@strOrderBy != '' 66 SET @strOrder = ' ORDER BY ' + @strOrderBy  67 --如果是第一頁就執行以上代碼,這樣會加快執行速度  68 IF (@PageIndex = 1)  69 BEGIN  70 IF (@strWhere != '' 71 SET @strSQL = 'SELECT TOP ' + str(@PageSize) + ' ' + @strGetFIElds + ' FROM [' + @tblName + '] WHERE ' + @strWhere + @strOrder  72 ELSE  73 SET @strSQL = 'SELECT TOP ' + str(@PageSize) + ' ' + @strGetFIElds + ' FROM ['+ @tblName + '] '+ @strOrder  74 END  75 ELSE  76 BEGIN  77 --為搜索表建立自動編號 保存到臨時表中  78 SET @strSQL = 'SELECT TOP ' + str(@PageIndex*@PageSize) + ' IDENTITY(int,1,1) AS IID, ' + @strGetFIElds + ' INTO #tmpTable FROM [' + @tblName + ']'  79 IF (@strWhere != '' 80 SET @strSQL = @strSQL + ' WHERE ' + @strWhere + @strOrder  81 ELSE  82 SET @strSQL = @strSQL + @strOrder  83    84 --以下代碼賦予了@strSQL以真正執行的SQL代碼  85 SET @strSQL = @strSQL + ' SELECT ' + @strGetFIElds + ' FROM #tmpTable WHERE IID > ' + str((@PageIndex-1)*@PageSize) + ' DROP TABLE #tmpTable'  86 END  87    88 PRINT @strSQL  89    90 --執行分頁查詢  91 EXEC (@strSQL)
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved