/****** Object: StoredProcedure [dbo].[PRO_PageForIdTable] Script Date: 04/29/2014 11:23:21 ******/
SET ANSI_NULLS ON
GOSET QUOTED_IDENTIFIER ON
GO-- =============================================
-- Author: [email protected]
-- Create date: 2013-04-03
-- Description:
-- =============================================
CREATE proc [dbo].[PRO_PageForIdTable]
(
@TableName NVARCHAR(50), --要查询的表名称,单表名称
@FieldsName NVARCHAR(1024), --要返回的列名称 :*
@IdName NVARCHAR(50), --标识列名称 能够唯一标识数据:ID
@StrWhere NVARCHAR(max), --要求带WHERE关键字:where addtime>‘2012‘
@OrderASC bit, --是否升序,0:DESC,1:ASC 要求和
@Page INT, --页码从1开始
@PageSize INT, --
@TotalRow INT output -- 记录总数
)
as
BEGIN
SET NOCOUNT ON;
DECLARE @sqlOrder AS NVARCHAR(512);
DECLARE @sql AS NVARCHAR(MAX);
if(@OrderASC=0)
set @sqlOrder=‘order by ‘+@IdName+‘ desc‘;
else
set @sqlOrder=‘order by ‘+@IdName+‘ asc‘;begin
if(@Page<2)
--select top 20 id from tb_errorlog where id>33333 and id<444444 order by id desc
set @sql=‘ select top ‘+ CONVERT(NVARCHAR(20),@PageSize) +‘ ‘+@FieldsName+‘ from ‘+@TableName+‘ ‘+@StrWhere+‘ ‘+@sqlOrder;
else if(@OrderASC=0)
begin
if(@StrWhere=‘‘)
-- select top 20 id from tb_errorlog
-- where id<(select min(id) from (select top 30000 id from tb_errorlog order by id desc) as cnic_t_2012_001)
-- order by id desc
set @sql=‘select top ‘+ CONVERT(NVARCHAR(20),@PageSize) +‘ ‘+@FieldsName+‘ from ‘+@TableName
+‘ where ‘+@IdName+‘<(select min(‘+@IdName+‘) from (select top ‘+CONVERT(NVARCHAR(20),@PageSize*(@Page-1))+‘ ‘+@IdName+‘ from ‘+@TableName+‘ ‘+@sqlOrder+‘) as cnic_t_2012_001) ‘
+@sqlOrder
else
-- select top 20 id from tb_errorlog where id>33333 and id<444444
-- and id<(select min(id) from (select top 30000 id from tb_errorlog where id>33333 and id<444444 order by id desc) as cnic_t_2012_001)
-- order by id desc
set @sql=‘select top ‘+ CONVERT(NVARCHAR(20),@PageSize) +‘ ‘+@FieldsName+‘ from ‘+@TableName+‘ ‘+ @StrWhere
+‘ and ‘+@IdName+‘<(select min(‘+@IdName+‘) from (select top ‘+CONVERT(NVARCHAR(20),@PageSize*(@Page-1))+‘ ‘+@IdName+‘ from ‘+@TableName+‘ ‘+ @StrWhere+‘ ‘+@sqlOrder+‘) as cnic_t_2012_001) ‘
+@sqlOrder
end
else
begin
if(@StrWhere=‘‘)
-- select top 20 id from tb_errorlog
-- where id<(select min(id) from (select top 30000 id from tb_errorlog order by id desc) as cnic_t_2012_001)
-- order by id desc
set @sql=‘ select top ‘+ CONVERT(NVARCHAR(20),@PageSize) +‘ ‘+@FieldsName+‘ from ‘+@TableName
+‘ where ‘+@IdName+‘>(select max(‘+@IdName+‘) from (select top ‘+CONVERT(NVARCHAR(20),@PageSize*(@Page-1))+‘ ‘+@IdName+‘ from ‘+@TableName+‘ ‘+@sqlOrder+‘) as cnic_t_2012_001) ‘
+@sqlOrder
else
-- select top 20 id from tb_errorlog where id>33333 and id<444444
-- and id<(select min(id) from (select top 30000 id from tb_errorlog where id>33333 and id<444444 order by id desc) as cnic_t_2012_001)
-- order by id desc
set @sql=‘select top ‘+ CONVERT(NVARCHAR(20),@PageSize) +‘ ‘+@FieldsName+‘ from ‘+@TableName+‘ ‘+ @StrWhere
+‘ and ‘+@IdName+‘>(select max(‘+@IdName+‘) from (select top ‘+CONVERT(NVARCHAR(20),@PageSize*(@Page-1))+‘ ‘+@IdName+‘ from ‘+@TableName+‘ ‘+ @StrWhere+‘ ‘+@sqlOrder+‘) as cnic_t_2012_001) ‘
+@sqlOrder
end
end
--print (@sql);
exec (@sql);
set @sql=‘set @RowCount=(select count(‘+@FieldsName+‘) from ‘+@TableName+‘ ‘+@StrWhere+‘)‘;
exec sp_executesql @sql, N‘@RowCount int output‘, @TotalRow output;
ENDGO
SqlParameter[] Param = new SqlParameter[]{
new SqlParameter("@TableName","tb-xxx"),//0
new SqlParameter("@FieldsName","*"),//1
new SqlParameter("@IdName","ID"),//2
new SqlParameter("@StrWhere",sql.ToString()),//3 带where
new SqlParameter("@OrderASC",SortType==1),//4 此参数必须先强制转换为object类型
new SqlParameter("@Page",page),//5
new SqlParameter("@PageSize",pageSize),//6
new SqlParameter("@TotalRow",0)//7
};
Param[7].Direction = ParameterDirection.Output;
using (SqlDataReader dr = DbHelperSQL.RunProcedure("PRO_PageForIdTable", Param))
{
while (dr.Read())
{
rtun.Add(GetModel(dr));
}
dr.Close();
}
TotalRow = Convert.ToInt32(Param[7].Value);
MaxPage = Units.GetPageCount(TotalRow, pageSize);
return rtun;
SQL.PRO_PageForIdTable,码迷,mamicode.com