分页存储过程

/// <summary>
/// 获取分页数据
/// readType: 1-数据列表,2-记录总数,3-两者
/// </summary>
public static DataTable GetPagedList(string connectionString, ref Int64 recordCount, Int64 pageSize, Int64 pageIndex, string tableName, string keyName, string fieldName, string orderString, string whereString, int readType)
{
    string spName = "SP_GetPagedList";
    SqlParameter[] parms = new SqlParameter[]
    {
        new SqlParameter("recordCount",SqlDbType.BigInt),
        new SqlParameter("tableName",SqlDbType.VarChar,4000),
        new SqlParameter("keyName",SqlDbType.VarChar,200),
        new SqlParameter("fieldName",SqlDbType.VarChar,2000),
        new SqlParameter("pageSize",SqlDbType.BigInt),
        new SqlParameter("pageIndex",SqlDbType.BigInt),
        new SqlParameter("orderString",SqlDbType.VarChar,200),
        new SqlParameter("whereString",SqlDbType.VarChar,1000),
        new SqlParameter("readType",SqlDbType.Int,1000),
    };
    parms[0].Direction = ParameterDirection.Output;
    parms[1].Value = tableName;
    parms[2].Value = keyName;
    parms[3].Value = fieldName;
    parms[4].Value = pageSize;
    parms[5].Value = pageIndex;
    parms[6].Value = orderString;
    parms[7].Value = whereString;
    parms[8].Value = readType;


    DataTable dt = SqlHelper.ExecuteDataTable(connectionString, CommandType.StoredProcedure, spName, parms);
    recordCount = int.Parse(parms[0].Value.ToString());
    return dt;

}


/*分页存储过程*/

IF OBJECT_ID('SP_GetPagedList','P') IS NOT NULL
DROP PROCEDURE SP_GetPagedList
GO


CREATE PROCEDURE [dbo].[SP_GetPagedList]
    @recordCount BIGINT OUTPUT, --记录总数
    @tableName VARCHAR(4000), --表名(必需)
    @fieldName VARCHAR(2000) = '*', --显示字段
    @pageSize BIGINT = 10, --每页记录数
    @pageIndex BIGINT =1, --当前页
    @orderString VARCHAR(200)='', --排序
    @whereString VARCHAR(1000) = '', --WHERE条件
    @readtype int --1:数据,2:记录数,3:两者
AS
BEGIN
SET NOCOUNT ON
DECLARE @beginRow BIGINT
DECLARE @endRow BIGINT
DECLARE @NSQL NVARCHAR(4000)
DECLARE @SQL VARCHAR(8000)
DECLARE @whereRow VARCHAR(400)
declare @TmpTableName varchar(255)


SELECT @recordCount=0,@NSQL='',@SQL='',@whereRow=''


IF LTRIM(RTRIM(@fieldName))=''
SET @fieldName='*'


IF LTRIM(RTRIM(@orderString))<>'' 
SET @orderString=' ORDER BY ' + @orderString


IF LTRIM(RTRIM(@whereString))<>'' 
BEGIN
IF UPPER(LEFT(LTRIM(@whereString),3))='AND'
SET @whereString=' WHERE 1=1 ' + @whereString
ELSE
SET @whereString=' WHERE 1=1 AND ' + @whereString
END


IF @pageSize>0 AND @pageIndex>0
BEGIN
SET @beginRow = (@pageIndex - 1) * @pageSize + 1
SET @endRow = @pageIndex * @pageSize
SET @whereRow = ' AND (ROWID BETWEEN ' + CONVERT(VARCHAR(20),@beginRow) + ' AND ' + CONVERT(VARCHAR(20),@endRow) + ') '
END


set @TmpTableName='#TMP_' + REPLACE(CONVERT(VARCHAR(50),NEWID()),'-','')
SET @SQL =  ' SELECT ROWID=IDENTITY(BIGINT,1,1), ' + @fieldName + 
' INTO ' + @TmpTableName +
' FROM ' + @tableName + 
' WHERE 1=1 ' + @whereString + @orderString
EXEC(@SQL)


if (@readtype & POWER(2,0))>0
BEGIN
SET @NSQL = 'SELECT @recordCount = COUNT(1) FROM ' + @TmpTableName
EXEC sp_executesql @NSQL,N'@recordCount INT OUTPUT',@recordCount OUTPUT
END


if (@readtype & POWER(2,1))>0
BEGIN
SET @SQL =  ' SELECT * FROM ' + @TmpTableName +
' WHERE 1=1 ' + @whereRow +
' ORDER BY ROWID'
EXEC(@SQL)
END

IF OBJECT_ID('TEMPDB..' + @TmpTableName, 'U') IS NOT NULL
BEGIN
EXEC('DROP TABLE ' + @TmpTableName)
END
END
GO

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值