在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
继上一篇帖子「ASP.NET 数据分页第一篇 - 探讨分页原理及 SQL Server 2005 的 ROW_NUMBER 函数」后,版工已写了三个 ASP.NET 2.0「数据分页」的范例,提供网友们下载。这三个范例分别针对下列三种数据库,去做「数据分页」的处理:
View Code
-- 計算要顯示的資料列的起、迄資料列索引 -- 計算 @LowerCount (起始撈取的第一筆的資料列索引)、@UpperCount (要撈取的最後一筆的資料列索引) -- @StartRowIndex 資料列索引 if (@StartRowIndex = 0) begin SET @LowerBand = 0 SET @UpperBand = @PageSize end else begin SET @LowerBand = @StartRowIndex + 1 SET @UpperBand = @StartRowIndex + @PageSize end /* *** 以下為實際要傳回前端 GridView 的 DataTable 內容 *** */ SET @sqlDataTable = 'WITH tempTable AS (SELECT ' + @columnName + ', ROW_NUMBER() OVER(ORDER BY ' + @orderBy + ') AS tempRowNum FROM ' + @tableName + ' WHERE ' + @sqlWhere + ') SELECT * FROM tempTable WHERE tempRowNum BETWEEN ' + cast(@LowerBand as nvarchar) + ' AND ' + cast(@UpperBand as nvarchar) + ';' exec (@sqlDataTable)
View Code
-- 計算要顯示的資料列的起、迄資料列索引 -- 計算 @LowerCount (起始撈取的第一筆的資料列索引)、@UpperCount (要撈取的最後一筆的資料列索引) -- @StartRowIndex 資料列索引 if (@StartRowIndex = 0) begin SET @LowerBand = 0 SET @UpperBand = @PageSize end else begin SET @LowerBand = @StartRowIndex + 1 SET @UpperBand = @StartRowIndex + @PageSize end -- 用來辨識是否在最後一頁 SET @RemainRowCount = @rowCount - @StartRowIndex /* *** 以下為實際要傳回前端 GridView 的 DataTable 內容 *** */ -- 子查詢 (SELECT TOP n 夾擠式查詢) if (@RemainRowCount > @PageSize) -- 若還未到最後一頁 begin SET @sqlDataTable = 'SELECT TOP ' + cast(@PageSize as nvarchar) + ' ' + @columnName + ' FROM ( SELECT TOP ' + cast(@PageSize as nvarchar) + ' ' + @columnName + ' FROM (SELECT TOP ' + cast(@UpperBand as nvarchar) + ' ' + @columnName + ' FROM ' + @tableName + ' WHERE ' + @sqlWhere + ' ORDER BY ' + @orderBy1 + ') AS tempTable Order By ' + @orderBy2 + ') as tempTable2 Order By ' + @orderBy1 end else -- 若已經到最後一頁,且剩下不足一頁 @PageSize 數量的零星資料列 begin SET @sqlDataTable = 'SELECT TOP ' + cast(@RemainRowCount as nvarchar) + ' ' + @columnName + ' FROM ( SELECT TOP ' + cast(@RemainRowCount as nvarchar) + ' ' + @columnName + ' FROM (SELECT TOP ' + cast(@UpperBand as nvarchar) + ' ' + @columnName + ' FROM ' + @tableName + ' WHERE ' + @sqlWhere + ' ORDER BY ' + @orderBy1 + ') AS tempTable Order By ' + @orderBy2 + ') as tempTable2 Order By ' + @orderBy1 end exec (@sqlDataTable)
--------------------------------------------------
View Code
-- 計算要顯示的資料列的起、迄資料列索引 -- 計算 @LowerCount (起始撈取的第一筆的資料列索引)、@UpperCount (要撈取的最後一筆的資料列索引) -- @PageIndex : 要顯示的這一頁的頁面索引。配合 .NET 定義 : 第一頁的索引編號為 0,依序加 1,依此類推 if (@PageIndex = 0) --若為第一頁 begin SET @LowerBand = 0 SET @UpperBand = @PageSize end else begin SET @LowerBand = @PageIndex * @PageSize SET @UpperBand = (@PageIndex + 1) * @PageSize end -- 一組動態 sql (@tmp_sql) -- @sql 為實際從 DAL2 丟進來的完整 SELECT SQL 陳述式 -- SET ROWCOUNT 功能,類似於 SELECT TOP n SELECT @tmp_sql = ' SET ROWCOUNT ' + rtrim(ltrim(convert(char, @UpperBand))) + ' ' SELECT @tmp_sql = @tmp_sql + ltrim(@sql) -- 若目前所在頁數不是第一頁,則再刪除不需要的資料列(@LowerBand) If @LowerBand > 0 Begin SELECT @tmp_sql = @tmp_sql + ' SET ROWCOUNT ' + rtrim(ltrim(convert(char, @LowerBand))) + ' DELETE FROM #tmp2 ' End -- SET ROWCOUNT 0 表示資料表「全選」 SELECT @tmp_sql = @tmp_sql + ' SET ROWCOUNT 0 ' SELECT @tmp_sql = @tmp_sql + ' SELECT * FROM #tmp2' EXEC(@tmp_sql)
--------------------------------------------------
--------------转自 WizardWu:探讨分页原理及 SQL Server 2005 的 ROW_NUMBER 函数(二) |
请发表评论