儲存過程分頁,按多條件排序 原創

2022-05-06 14:03:13 字數 4957 閱讀 8294

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)

}//呼叫儲存過程的函式

private void getpage(out int totalpage, out int rowscount, int pagesize, int currentpage)

;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)

%>

儲存過程**:

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)--條件

asbegin

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'

endelse

begin           

set @ordersql= ' desc'

endif(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

endelse 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'         

endelse

begin

set @orderfield=replace(@orderfield,'desc','lai512343975')

set @orderfield=replace(@orderfield,'asc','desc')

set @orderfield=replace(@orderfield,'lai512343975','asc')

set @sql='select ' + @selectfields +' from  '+ @tablename +'  where ' +@strwhere+'  order by '+@orderfield +'  asc ' +','+@idfield+ ' asc'

print(@sql) 

end--print(@sql)

exec sp_executesql @sql

endelse

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

endgo

多條件分頁儲存過程資料庫寫法

create proc dbo p paging tablename varchar 8000 表名 檢視名 indexcol varchar 50 id 標識列名 如 比如主鍵 標識,推薦使用索引列 pagesize int 10,頁面大小 pageindex int 0,當前頁 ordercol...

多條件儲存過程 (條件拼接SQL語句)

alter proc sp pagedbyconditions countrycode nvarchar 20 國家編號 cid int,城市的id pageindex int 1,當前要顯示的頁碼 pagesize int 3,每頁要顯示的資料條數 頁大小 totalpages intout 總頁...

分頁儲存過程 排序

用途 支援任意排序的分頁儲存過程 說明 create procedure up getrecordbypageorder tblname varchar 255 表名 fldname varchar 255 顯示欄位名 orderfldname varchar 255 排序欄位名 statfldna...