参考借用了[中国无忧商务网]网友的存储过程CREATE procedure sp_pagesite
(
/*
@Tables 表名 必选
@PrimaryKey 主关键字 必选
@pagesize 页码大小 可选 默认值:1
@pageindex 当前页 可选 默认值:1
@docount 是否只统计总记录数 可选 默认值:否
@Fields 选择字段 可选 默认:所有字段
@Sort 排序语句,不带Order By 可选
@Filter 过滤语句,不带Where 可选
*/
@Tables nvarchar(400),
@PrimaryKey nvarchar(100),
@pagesize int=1,
@pageindex int=1,
@docount bit=0,
@Fields varchar(1000) = '*',
@Sort varchar(1000) = NULL,
@Filter varchar(1000) = NULL)
as
set nocount onDECLARE @strFilter varchar(1000)
DECLARE @strSort varchar(1000)
IF @Filter IS NOT NULL AND @Filter != ''
BEGIN
SET @strFilter = ' WHERE ' + @Filter + ' '
END
ELSE
BEGIN
SET @strFilter = ''
END
IF @Sort IS Not NULL And @Sort!=''
Begin
Set @strSort='order by '+@Sort+''
End
if(@docount=1)exec('select count('+@PrimaryKey+') from '+@Tables+' '+@strFilter+'')
else
begin
declare @PageLowerBound int
declare @PageUpperBound int
set @PageLowerBound=(@pageindex-1)*@pagesize
set @PageUpperBound=@PageLowerBound+@pagesize
create table #pageindex(id int identity(1,1) not null,nid int)
set rowcount @PageUpperBound
exec(
'
insert into #pageindex(nid)
select '+@PrimaryKey+' from '+@Tables+' '+@strFilter+' '+@strSort+'
select O.'+@Fields+'
from '+@Tables+' O,#pageindex p
where O.'+@PrimaryKey+'=p.nid and p.id>'+@PageLowerBound+' and p.id<='+@PageUpperBound+' order by p.id
'
)
end
set nocount off
GO
(
/*
@Tables 表名 必选
@PrimaryKey 主关键字 必选
@pagesize 页码大小 可选 默认值:1
@pageindex 当前页 可选 默认值:1
@docount 是否只统计总记录数 可选 默认值:否
@Fields 选择字段 可选 默认:所有字段
@Sort 排序语句,不带Order By 可选
@Filter 过滤语句,不带Where 可选
*/
@Tables nvarchar(400),
@PrimaryKey nvarchar(100),
@pagesize int=1,
@pageindex int=1,
@docount bit=0,
@Fields varchar(1000) = '*',
@Sort varchar(1000) = NULL,
@Filter varchar(1000) = NULL)
as
set nocount onDECLARE @strFilter varchar(1000)
DECLARE @strSort varchar(1000)
IF @Filter IS NOT NULL AND @Filter != ''
BEGIN
SET @strFilter = ' WHERE ' + @Filter + ' '
END
ELSE
BEGIN
SET @strFilter = ''
END
IF @Sort IS Not NULL And @Sort!=''
Begin
Set @strSort='order by '+@Sort+''
End
if(@docount=1)exec('select count('+@PrimaryKey+') from '+@Tables+' '+@strFilter+'')
else
begin
declare @PageLowerBound int
declare @PageUpperBound int
set @PageLowerBound=(@pageindex-1)*@pagesize
set @PageUpperBound=@PageLowerBound+@pagesize
create table #pageindex(id int identity(1,1) not null,nid int)
set rowcount @PageUpperBound
exec(
'
insert into #pageindex(nid)
select '+@PrimaryKey+' from '+@Tables+' '+@strFilter+' '+@strSort+'
select O.'+@Fields+'
from '+@Tables+' O,#pageindex p
where O.'+@PrimaryKey+'=p.nid and p.id>'+@PageLowerBound+' and p.id<='+@PageUpperBound+' order by p.id
'
)
end
set nocount off
GO
SqlCommand cmd1=new SqlCommand("sp_pagesite",conn.dbconn);
cmd1.CommandType=CommandType.StoredProcedure;
cmd1.Parameters.Add("@Tables","JF_News");
cmd1.Parameters.Add("@PrimaryKey","nID");
cmd1.Parameters.Add("@Filter","CompanyID="+cid+""+audit_sql);
cmd1.Parameters.Add("@DoCount",true);
pager.RecordCount=(int)cmd1.ExecuteScalar();SqlCommand cmd1=new SqlCommand("sp_pagesite",conn.dbconn);
cmd1.CommandType=CommandType.StoredProcedure;
cmd1.Parameters.Add("@Tables","JF_News");
cmd1.Parameters.Add("@PrimaryKey","nID");
cmd1.Parameters.Add("@PageSize",pager.PageSize);
cmd1.Parameters.Add("@PageIndex",pager.CurrentPageIndex);
cmd1.Parameters.Add("@Filter","CompanyID="+cid+""+audit_sql);
list_news.DataSource=cmd1.ExecuteReader();
list_news.DataBind();
CREATE procedure CustomPaginationProcedure
/*
功能:此过程也是用于记录分页,此过程可用多表关联的记录分页,过程接受一条SQL语句,用户所有的查询应该在这条语句中已完成,此SQL语句中不能有ORDER BY语句
Writer:Jeff
Date:2003.09.20
*/
(
@P_field varchar(50)="", --关键字段,如果没有,将会自己产一个关键字段.
@order_field varchar(100)="",
@SqlStr varchar(4000),
@pagesize int,
@pageindex int,
@recordCount int output)
AS
DECLARE @STR1 nvarchar(4000)
DECLARE @OrderStr varchar(200)
if @Order_field=""
SET @OrderStr=""
else
begin
SET @Order_field=REPLACE(@Order_field,",",",SQL.")
SET @OrderStr=" order by SQL."+@Order_field
end
if @P_field<>""
begin
SET @SqlStr="("+@SqlStr+")SQL"
set @STR1=N'select @total2=count(SQL.'+@P_field+') from '+@SqlStr
end
else
begin
declare @tempSqlStr varchar(4000)
set @tempSqlStr=lower(@SqlStr)
SET @SqlStr="("+@SqlStr+")SQL"
set @STR1=N'select @total2=count(*) from '+@SqlStr
end
exec sp_executesql @STR1,N' @total2 int output ',@RecordCount output
if @P_field<>""
EXECUTE("
declare @indextable table(id int identity(1,1),nid bigint);
declare @PageLowerBound int;
declare @PageUpperBound int;
set @PageLowerBound=("+@pageindex+"-1)*"+@pagesize+";
set @PageUpperBound=@PageLowerBound+"+@pagesize+";
set rowcount @PageUpperBound;
insert into @indextable (nid) select SQL."+@P_field+" from "+@SqlStr+@OrderStr+"
select SQL.* FROM "+@SqlStr+",@indextable t where t.nid=SQL."+@P_field+" and t.id>@PageLowerBound and t.id<=@PageUpperBound order by t.id
set nocount off
")
else
Begin
--为记录集添加一个唯一标识字段
set @tempSqlStr=Replace(@tempSqlStr,'select',' select IDENTITY(bigint, 1, 1) AS gid ,')
set @tempSqlStr=Replace(@tempSqlStr,'from',' into ##gtable from ')
print @tempSqlStr
execute(@tempSqlStr)
EXECUTE("
declare @indextable table(id int identity(1,1),nid bigint);
declare @PageLowerBound int;
declare @PageUpperBound int;
set @PageLowerBound=("+@pageindex+"-1)*"+@pagesize+";
set @PageUpperBound=@PageLowerBound+"+@pagesize+";
set rowcount @PageUpperBound;
insert into @indextable (nid) select SQL.gid from ##gtable SQL "+@OrderStr+"
select SQL.* FROM ##gtable SQL,@indextable t where t.nid=SQL.gid and t.id>@PageLowerBound and t.id<=@PageUpperBound order by t.id
set nocount off
drop table ##gtable
")
end
GO