扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:黎波 来源:csdn开发高手 2007年11月7日
关键字: Windows
SELECT TOP @PageSize @QueryFields FROM @TableName WHERE @Condition ORDER BY @PrimaryKey DESC |
SELECT TOP @PageSize @QueryFields FROM @TableName WHERE @PrimaryKey < ( SELECT MIN(@PrimaryKey) FROM ( SELECT TOP @PageSize*@PageIndex @PrimaryKey FROM @TableName WHERE @Condition ORDER BY @PrimaryKey DESC ) TableA ) WHERE @Condition ORDER BY @PrimaryKey DESC |
SELECT * FROM ( SELECT TOP @PageSize @QueryFields FROM @TableName WHERE @PrimaryKey > ( SELECT MAX(@PrimaryKey) FROM ( SELECT TOP (@RecordCount-@PageSize*(@PageIndex+1)) @PrimaryKey FROM @TableName WHERE @Condition ORDER BY @PrimaryKey ASC ) TableA ) WHERE @Condition ORDER BY @PrimaryKey ASC ) TableB ORDER BY @PrimaryKey DESC |
SELECT * FROM ( SELECT TOP (@RecordCount-@PageSize*@LastIndex) @QueryFields FROM @TableName WHERE @Condition ORDER BY @PrimaryKey ASC ) TableA ORDER BY @PrimaryKey DESC |
// 产生根据指定字段排序并分页查询的 SELECT 语句。 public static String Paging( int pageSize, //每页要显示的记录的数目。 int pageIndex, //要显示的页的索引。 int recordCount, //数据表中的记录总数。 String tableName, //要查询的数据表。 String queryFields, //要查询的字段。 String primaryKey, //主键字段。 bool ascending, //是否为升序排列。 String condition //查询的筛选条件。 ) { StringBuilder sb = new StringBuilder(); int pageCount = GetPageCount(recordCount,pageSize); //分页的总数 int middleIndex = GetMidPageIndex(pageCount); //中间页的索引 int firstIndex = 0; //第一页的索引 int lastIndex = pageCount - 1; //最后一页的索引 if (pageIndex <= firstIndex) { // 代码略 } else if (pageIndex > firstIndex && pageIndex <= middleIndex) { sb.Append("SELECT TOP ").Append(pageSize).Append(" ") .Append(queryFields).Append(" FROM ").Append(tableName) .Append(" WHERE ").Append(primaryKey); if (ascending) sb.Append(" > (").Append(" SELECT MAX("); else sb.Append(" < (").Append(" SELECT MIN("); sb.Append(primaryKey).Append(") FROM ( SELECT TOP ") .Append(pageSize*pageIndex).Append(" ").Append(primaryKey) .Append(" FROM ").Append(tableName); if (condition != String.Empty) sb.Append(" WHERE ").Append(condition); sb.Append(" ORDER BY ").Append(primaryKey).Append(" ") .Append(GetSortType(ascending)).Append(" ) TableA )"); if (condition != String.Empty) sb.Append(" AND ").Append(condition); sb.Append(" ORDER BY ").Append(primaryKey).Append(" ") .Append(GetSortType(ascending)); } else if (pageIndex > middleIndex && pageIndex < lastIndex) { // 代码略 } else if (pageIndex >= lastIndex) { // 代码略 } return sb.ToString(); } 除了Paging方法还有另外几个方法: // 根据记录总数和分页大小计算分页数。 public static int GetPageCount(int recordCount, int pageSize) { return (int)Math.Ceiling((double)recordCount/pageSize); } // 计算中间页的页索引。 public static int GetMidPageIndex(int pageCount) { return (int)Math.Ceiling((double)pageCount/2) - 1; } // 获取排序的方式("ASC"表示升序,"DESC"表示降序) public static String GetSortType(bool ascending) { return (ascending ? "ASC" : "DESC"); } // 获取一个布尔值,该值指示排序的方式是否为升序。 public static bool IsAscending(String orderType) { return ((orderType.ToUpper() == "DESC") ? false : true); } |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者