sql2005 分页存储过程

1。tblname 表名可以是连接好的

2。keyfield order by 为row_number() 用的

3. ordertype 0 升序,1降序

4。fields 要返回的字段列表

5。where 条件, 不带WHERE关键字

6,pagesize 每页记录数

7,pageindex 第几页

8,totalcount 总记录数

 

 

 

ALTER PROCEDURE [dbo].[SP_Pagination]
@tblName VARCHAR(255),            -- base table + join table
@keyField VARCHAR(255),            -- order by field
@orderType BIT = 0,                -- 0-Asc, 1-Desc
@fields VARCHAR(1000) = '*',    --
@where VARCHAR(1500) = '',        -- condition, note no 'where'
@pageSize INT = 20,                --
@pageIndex INT = 1,                --
@totalCount INT OUTPUT            --
AS
DECLARE @strSql nVARCHAR(4000)
DECLARE @beginIndex  INT   
DECLARE @endIndex  INT

SET @beginIndex = @pageSize * (@pageIndex - 1) + 1;
SET @endIndex = @pageSize * @pageIndex;

-- get total count
IF @where !=''
    SET @strSql = N'SELECT @totalCount = ISNULL(count(1),0) FROM ' + @tblName + ' WHERE '+@where + ';';
ELSE
    SET @strSql = N'SELECT @totalCount = ISNULL(count(1),0) FROM ' + @tblName + ';';

-- get records by page if pagesize > 0, else get all records
IF @pageSize > 0
BEGIN
    SET @strSql = @strSql + 'SELECT ' + @fields + ' FROM ( SELECT ' + @fields + ',ROW_NUMBER() OVER (ORDER BY ' + @keyField;

    IF(@orderType = 1)
        SET @strSql = @strSql + ' DESC';

    SET @strSql = @strSql + ') AS ROWINDEX FROM ' + @tblName + '';

    IF @where !=''
        SET @strSql = @strSql + ' WHERE ' + @where;

    SET @strSql = @strSql + ') AS tempTable WHERE ROWINDEX BETWEEN ' + CAST (@beginIndex AS VARCHAR ) + ' AND ' + CAST (@endIndex AS VARCHAR ) + ';';
END
ELSE
BEGIN
    SET @strSql = @strSql + 'SELECT ' + @fields + ' FROM ' + @tblName + '';

    IF @where !=''
        SET @strSql = @strSql + ' WHERE ' + @where;

    SET @strSql = @strSql + ';';
END

EXECUTE sp_executesql @strSql,N'@totalCount INT OUTPUT', @totalCount output;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

honkerhero

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值