這裡面介紹一下常用的分頁方法:
1.使用top來分頁
sql**
select
top@pagesize *
from
table
where
id not
in(select
top@pagesize*(@pageindex-1) id
from
table
)
2.使用 row_number()over
sql**
select
* from
(select
row_number() over (
order
byt.欄位名
desc)as
row, t.*
from
表名 t
where
條件 ) tt
where
tt.row
between
起始位置
and結束位置;
stringbuilder strsql = new stringbuilder();
);
);
if (!string.isnullorwhitespace(orderby.trim()))
else
);
if (!string.isnullorwhitespace(strwhere.trim()))
);
, startindex, endindex);
3.使用分頁儲存過程
sql**
if exists (
select
* from
dbo.sysobjects
where
id = object_id(n
'[dbo].[sys_page_v2]'
) and
objectproperty(id, n
'isprocedure'
) = 1)
drop
procedure
[dbo].[sys_page_v2]
go
create
procedure
[dbo].[sys_page_v2]
@pcount int
output
,
--總頁數輸出
@rcount int
output
,
--總記錄數輸出
@sys_table nvarchar(100), --查詢表名
@sys_key varchar
(50),
--主鍵
@sys_fields nvarchar(500), --查詢字段
@sys_where nvarchar(3000), --查詢條件
@sys_order nvarchar(100), --排序字段
@sys_begin int
,
--開始位置
@sys_pageindex int
,
--當前頁數
@sys_pagesize int
--頁大小
asset
nocount
onset
ansi_warnings
onif @sys_pagesize
@sys_pageindex
begin
return
enddeclare
@new_where1 nvarchar(3000)
declare
@new_order1 nvarchar(100)
declare
@new_order2 nvarchar(100)
declare
@sql nvarchar(4000)
declare
@sqlcount nvarchar(4000)
declare
@top
intif(@sys_begin <=0)
set@sys_begin=0
else
set@sys_begin=@sys_begin-1
if isnull
(@sys_where,
'') =
''set
@new_where1 =
' 'else
set@new_where1 =
' where '
+ @sys_where
if isnull
(@sys_order,
'') <>
''begin
set@new_order1 =
' order by '
+ replace
(@sys_order,
'desc',''
) set
@new_order1 =
replace
(@new_order1,
'asc'
,'desc'
) set
@new_order2 =
' order by '
+ @sys_order
endelse
begin
set@new_order1 =
' order by id desc'
set@new_order2 =
' order by id asc'
endset
@sqlcount =
'select @rcount=count(1),@pcount=ceiling((count(1)+0.0)/'
+ cast
(@sys_pagesize
asnvarchar)+
') from '
+ @sys_table + @new_where1
exec
sp_executesql @sqlcount,n
'@rcount int output,@pcount int output'
, @rcount output
,@pcount
output
if @sys_pageindex > ceiling((@rcount+0.0)/@sys_pagesize) --如果輸入的當前頁數大於實際總頁數,則把實際總頁數賦值給當前頁數
begin
set@sys_pageindex = ceiling((@rcount+0.0)/@sys_pagesize)
endset
@sql =
'select '
+ @sys_fields +
' from '
+ @sys_table +
' w1 '
+ ' where '
+ @sys_key +
' in ('
+'select top '
+ ltrim(str(@sys_pagesize)) +
' '+ @sys_key +
' from '
+'('
+'select top '
+ ltrim(str(@sys_pagesize * @sys_pageindex + @sys_begin)) +
' '+ @sys_key +
' from '
+ @sys_table + @new_where1 + @new_order2
+') w '
+ @new_order1
+') '
+ @new_order2
print(@sql)
exec
(@sql)
go
sql server 實現分頁方法
var ipage getpage 獲取當前頁 var ipagesize 20 每頁的記錄數量 var sql select top ipagesize id,user from users where age 18 and id not in select top ipagesize ipage...
SqlServer 經常使用分頁方法總結
以下演示樣例總結了,sqlserver資料庫 經常使用分頁方法,僅供學習參考 使用 rownumber 和 between and 組合分頁 create proc proc fuzzysearchandpaging pageindex int,頁索引 pagesize int,頁大小 search...
sqlserver三種分頁查詢方法
假設有表student,每頁顯示10條記錄,查詢第5頁的內容。from student where idnotin 40是這麼計算出來的 10 5 1 select top 40 idfrom student order byid order by id原理 需要拿出資料庫的第5頁,就是40 50條...