SQL SERVER 2000 高效分页查询语句

本文介绍了一种将已有的SQL查询语句封装为分页存储过程的方法。该方法通过输入原始SQL语句、唯一标识符及其类型、起始行索引及每页的最大行数等参数,自动生成分页SQL存储过程。适用于需要实现分页功能的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        /// <summary>
        /// 将已经存在的SQL语句包装成分页SQL存储过程。
        /// </summary>
        /// <param name="sourceSql">已经存在的SQL语句。</param>
        /// <param name="key">对于已经存在的SQL语句中能唯一标识的字段名称。</param>
        /// <param name="keyType">对于key在SQL中的类型名称。</param>
        /// <param name="startRowIndex">分页起始记录索引号。</param>
        /// <param name="maximumRows">每页最大记录数。</param>
        /// <returns>分页SQL存储过程语句。</returns>
        public static string WrapPagingProcedure(string sourceSql, string key, string keyType, int? startRowIndex, int? maximumRows)
        {
            if (startRowIndex == null || maximumRows == null)
            {
                return sourceSql;
            }
            startRowIndex++;

            string sql =
                "DECLARE @PK " + keyType + " " +
                "DECLARE @tblPK TABLE(PK " + keyType + " NOT NULL PRIMARY KEY) " +
                "DECLARE @PagingSize int " +
                "DECLARE PagingCursor CURSOR DYNAMIC READ_ONLY FOR " +
                "SELECT " + key + " FROM(" + sourceSql + ") AS T " +
                "OPEN PagingCursor " +
                "FETCH RELATIVE " + startRowIndex.ToString() + " FROM PagingCursor INTO @PK " +
                "SET @PagingSize = " + maximumRows.ToString() + " " +
                "WHILE @PagingSize > 0 AND @@FETCH_STATUS = 0 " +
                "BEGIN " +
                "   INSERT @tblPK(PK) VALUES(@PK) " +
                "   FETCH NEXT FROM PagingCursor INTO @PK " +
                "   SET @PagingSize = @PagingSize - 1 " +
                "END " +
                "CLOSE PagingCursor " +
                "DEALLOCATE PagingCursor " +
                "SELECT * FROM(" + sourceSql + ") AS T INNER JOIN @tblPK temp ON T." + key + " = temp.PK ";

            return sql;
        }

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值