sqlserver 存储过程分页(按多条件排序)
发布时间:2020-12-12 09:32:08 所属栏目:MsSql教程 来源:网络整理
导读:cs页面调用代码: 代码如下: public int TotalPage = 0; public int PageCurrent = 1; public int PageSize = 25; public int RowsCount = 0; string userid,username; public DataTable dt = new DataTable(); public string path,userwelcome; public stri
cs页面调用代码: 代码如下: public int TotalPage = 0; public int PageCurrent = 1; public int PageSize = 25; public int RowsCount = 0; string userid,username; public DataTable dt = new DataTable(); public string path,userwelcome; public string opt,cid; protected void Page_Load(object sender,EventArgs e) { if (!IsPostBack) { if (Request.Params["page"] == null || Request.Params["page"].ToString().Equals("")) PageCurrent = 1; else PageCurrent=int.Parse(Request.Params["page"].ToString()); this.getPage(out TotalPage,out RowsCount,PageSize,PageCurrent); } } //调用存储过程的函数 private void getPage(out int totalPage,out int rowsCount,int pageSize,int currentPage) { SqlParameter[] parameters = { new SqlParameter("@TotalPage",SqlDbType.Int,4), new SqlParameter("@RowsCount", new SqlParameter("@PageSize", new SqlParameter("@CurrentPage", new SqlParameter("@SelectFields",SqlDbType.NVarChar,700), new SqlParameter("@IdField",50), new SqlParameter("@OrderField",200), new SqlParameter("@OrderType",2), new SqlParameter("@TableName",300), new SqlParameter("@strWhere", }; parameters[0].Direction = ParameterDirection.Output; parameters[1].Direction = ParameterDirection.Output; parameters[2].Value = pageSize; parameters[3].Value = currentPage; parameters[4].Value = "a.RLId,a.companyName,a.webSite,a.isRL,a.ordernum,a.isrl,a.userid"; parameters[5].Value = "a.RLId"; parameters[6].Value = " a.isrl asc,a.orderNum "; parameters[7].Value = "1"; parameters[8].Value = "qiYeRenling a"; parameters[9].Value = "1=1";// DataSet ds = Wm23Abc.DBUtility.DbHelperSQL.RunProcedure("getRecordByPage",parameters,"dt"); dt = ds.Tables[0]; totalPage = int.Parse(parameters[0].Value.ToString()); rowsCount = int.Parse(parameters[1].Value.ToString()); } .aspx页面代码: 公司名称 | <%for (int i = 0; i < dt.Rows.Count; i++)
第 <%=PageCurrent %> 页 共 <%=RowsCount %> 条 共 <%=TotalPage%> 页
<% if (PageCurrent != 1)
{
%>
">上一页 <%
}
if (PageCurrent != TotalPage)
{
%>
">下一页
">末 页
<%
}
%>
存储过程代码:
代码如下:CREATE proc [dbo].[getRecordByPage]
@TotalPage int output,--总页数
@RowsCount int output,--总条数
@PageSize int,--每页多少数据
@CurrentPage int,--当前页数
@SelectFields nvarchar(1000),--select 语句但是不包含select
@IdField nvarchar(50),--主键列
@OrderField nvarchar(50),--排序字段,如果是多个字段,除最后一个字段外,后面都要加排序条件(asc/desc),不包含order by,最后一个排序字段不用加排序条件
@OrderType nvarchar(4),--1升序,0降序
@TableName nvarchar(200),--表名
@strWhere nvarchar(300)--条件
As
Begin
declare @RecordCount float
declare @PageNum int --分页依据数
Declare @Compare nvarchar(50)--比较字段区分min或者max
Declare @Compare1 nvarchar(2) --大于号“>” 或者小于号"<“
Declare @OrderSql nvarchar(10)--排序字段
declare @Sql nvarchar(4000)
Declare @TemSql nvarchar(1000)
Declare @nRd int
declare @afterRows int
declare @tempTableName nvarchar(10) if(@OrderType='1')
Begin
set @OrderSql=' asc'
End
Else
Begin
set @OrderSql= ' desc'
End
if(isnull(@strWhere,'')<>'')
Set @strWhere = @strWhere
if(@strWhere='')
Set @strWhere=' 1=1 ' Set @TemSql='Select @RecordCount=Count(1) from '+@TableName +' where '+@strWhere
exec sp_executesql @TemSql,N'@RecordCount float output',@RecordCount output
Set @RowsCount=@RecordCount
Set @TotalPage= ceiling(@RecordCount/@PageSize)
if(@CurrentPage>@TotalPage)
Set @CurrentPage=@TotalPage
if(@CurrentPage<1)
Set @CurrentPage=1
if(@PageSize<1)
Set @PageSize=1
print(@RecordCount)
if(@CurrentPage=1)
Begin
set Rowcount @PageSize
set @Sql='select '+ @SelectFields +' from '+ @TableName +' where ' +@strWhere+' order by '+@OrderField +' '+@OrderSql +','+@IdField +' asc'
--print(@Sql)
exec sp_executeSql @Sql End
else if(@CurrentPage=@TotalPage)
begin
set @afterRows=@RowsCount-(@CurrentPage-1)*@PageSize
set RowCount @afterRows
if(@OrderType='1')
begin
set @OrderField=REPLACE(@OrderField,'asc','lai512343975')//这里用变量将asc和desc互换,哈哈,太神了
set @OrderField=REPLACE(@OrderField,'desc','asc')
set @OrderField=REPLACE(@OrderField,'lai512343975','desc')
set @Sql='select ' + @SelectFields +' from '+ @TableName +' where ' +@strWhere+' order by '+@OrderField +' desc'+','+@IdField +' asc' end
else
begin
set @OrderField=REPLACE(@OrderField,'lai512343975')
set @OrderField=REPLACE(@OrderField,'desc')
set @OrderField=REPLACE(@OrderField,'asc')
set @Sql='select ' + @SelectFields +' from '+ @TableName +' where ' +@strWhere+' order by '+@OrderField +' asc ' +','+@IdField+ ' asc'
print(@Sql)
end
--print(@Sql)
exec sp_executeSql @Sql
end
else
Begin
set @nRd=@PageSize* (@CurrentPage-1)
print(@nRd)
set RowCount @PageSize
set @Sql='select ' + @SelectFields +' from '+ @TableName +' where ' +@strWhere+' and '+@IdField + ' not in (select top '+ cast(@nRd as nvarchar(10))+' '+@IdField+' from '+@TableName+' where '+ @strWhere+' order by '+@OrderField +' '+@OrderSql+','+@IdField +' asc) ' + ' order by '+ @OrderField + ' ' +@OrderSql+','+@IdField +' asc'
exec sp_executeSql @Sql
--Print(@sql)
End
end
GO
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
相关内容
- sql-server – 可以将MS SQL 2005备份还原到MS SQL 2008的实
- 使用innodb_force_recovery解决MySQL崩溃无法重启问题
- create sqlserver login user and add it to certain db us
- 深入SQLServer中ISNULL()和Oracle 的nvl()函数使用详解
- 自动增加sql-server中的非标识列
- SqlServer中操作表及表结构的Select合集(转)
- 用触发器对sqlserver进行数据备份
- Mysql安装与配置调优及修改root密码的方法
- sql-server – 使用GUI恢复数据库 – 要恢复的文件错误
- asp.net Excel转换为SQL Server的方法
推荐文章
站长推荐
热点阅读