SQL分页存储过程

来源:互联网 发布:手机淘宝收藏降价提醒 编辑:程序博客网 时间:2024/04/30 01:42

下面是SQL命令在企业管理器里面直接创建一个存储过程然后输入下面内容保存为GetCurrentPageData(这个名字可以自己更改)

 CREATE          PROCEDURE [dbo].[GetCurrentPageData]
    @TableName             varchar(1000),          --table name 换成SQL语句
    @KeyFildName           varchar(255),          --key filed name
    @PageIndex               int,                    --page index
    @PageSize                 int,                  --page size
    @TotalRecord            int output            --return recordNum
AS

IF lower(left(ltrim(@TableName),6))='select'
BEGIN
 SET @TableName='SELECT TOP 999999999 '+ substring(@TableName,7,8000)
END

declare @strSQL   nvarchar(4000)
DECLARE @TopNum int
SET @TopNum=(@PageIndex-1)*@PageSize
SET @strSQL=N'select @TotalRecord=count(*)  from ('+@TableName+') AS T '

print(@strSQL)
    EXEC SP_EXECUTESQL @strSQL,N'@TotalRecord int OUT',@TotalRecord OUT
IF @TotalRecord is Null
begin
set @TotalRecord=1
end
PRINT(@TotalRecord)


PRINT(@TableName)

SET @strSQL='SELECT TOP '+str(@PageSize)+' *
                         FROM ('+@TableName+') AS T1
             WHERE '+@KeyFildName+ ' NOT IN (SELECT TOP '+str(@TopNum)+' '+@KeyFildName+'
                                                                                     FROM ('+@TableName+') AS T2)'
print (@strSQL)
exec(@strSQL)
GO
以上存储过程建立完成后就开始在C#项目下面建立一个类库,在类库新建一个类,然后在类里面建一个共用方法如下:

 

  1. /// <summary>
  2. /// 获取当前页的信息
  3. /// </summary>
  4. /// <param name="sql">SQL语句或是视图</param>
  5. /// <param name="keyFildName">关键字段名(注意:一定要是唯一性的字段)</param>
  6. /// <param name="pageIndex">当前页数</param>
  7. /// <param name="pageSize">每页大小</param>
  8. /// <param name="totalRecord">记录总数</param>
  9. /// <returns></returns>
  10. public DataTable GetCurrentPageDataForSql(string sql, string keyFildName,int pageIndex, int pageSize, out int totalRecord)
  11.         {
  12.             totalRecord = 0;
  13.             SqlParameter[] sqlPar = new SqlParameter[6];
  14.             sqlPar[0] = new SqlParameter("@TableName", SqlDbType.VarChar);
  15.             sqlPar[0].Direction = ParameterDirection.Input;
  16.             sqlPar[0].Value = sql;
  17.             sqlPar[1] = new SqlParameter("@KeyFildName", SqlDbType.VarChar);
  18.             sqlPar[1].Direction = ParameterDirection.Input;
  19.             sqlPar[1].Value = keyFildName;
  20.             sqlPar[2] = new SqlParameter("@PageIndex", SqlDbType.Int);
  21.             sqlPar[2].Direction = ParameterDirection.Input;
  22.             sqlPar[2].Value = pageIndex;
  23.             sqlPar[3] = new SqlParameter("@PageSize", SqlDbType.Int);
  24.             sqlPar[3].Direction = ParameterDirection.Input;
  25.             sqlPar[3].Value = pageSize;
  26.             sqlPar[4] = new SqlParameter("@TotalRecord", SqlDbType.Int);
  27.             sqlPar[4].Direction = ParameterDirection.Output;
  28.             DataTable dt = DataAccess.GetDataTable_Proc("GetCurrentPageDatal", sqlPar);    //这方法要自己去写一个,
  29.                                                                                                                                                    //只是一个调用存储过程的方法
  30.             if (sqlPar[4].Value != DBNull.Value && sqlPar[4].Value != null)
  31.             {
  32.                 totalRecord = Convert.ToInt32(sqlPar[4].Value);
  33.             }
  34.             return dt;
  35.         }
  36. 所有代码就如上了
原创粉丝点击