第一種 top剔除法。去除top (pageindex-1)*pagesize
select第二種 max剔除法 。去除 小於 max(pageindex-1)*pagesizetop10
*from
dbo.sbd_exchange_bill
where eb_id not
in (select
top (10
*1) eb_id from dbo.sbd_exchange_bill order
by eb_id)
select第三種方法 游標法(來自網路)top10
*from
dbo.sbd_exchange_bill
where eb_id >(select
max(eb_id)
from (select
top (10
*2) eb_id from dbo.sbd_exchange_bill order
by eb_id) as t )
create儲存過程procedure
pgo_getrecordfrompage
@tblname
varchar(255), --
表名@fldname
varchar(255), --
欄位名@pagesize
int=
10, --
頁尺寸@pageindex
int=
1, --
頁碼@iscount
bit=
0, --
返回記錄總數, 非 0 值則返回
@ordertype
bit=
0, --
設定排序型別, 非 0 值則降序
@strwhere
varchar(1000) =
''--
查詢條件 (注意: 不要加 where)
asdeclare
@strsql
varchar(6000) --
主語句declare
@strtmp
varchar(500) --
臨時變數
declare
@strorder
varchar(400) --
排序型別
if@iscount!=0
--假如是查詢記錄總數,直接應用count(0)函式
begin
if@strwhere
!=''
set@strsql='
select count(*) as total from ['+
@tblname+'
] where '+
@strwhere
else
set@strsql='
select count(*) as total from ['+
@tblname+'
] 'end--
假如是想查詢記載,則
else
begin
if@pageindex=1
--如果是第一頁
begin
set@strtmp=''
if@strwhere
!=''
set@strtmp='
where '+
@strwhere
set@strsql='
select top '+
str(@pagesize) +
'* from ['+
@tblname+'
]'+@strtmp+'
'+@strorder
endelse
--如果不是第一頁
begin
--假如是降序查詢……
if@ordertype!=0
begin
set@strtmp='
'set
@strorder='
order by ['+
@fldname+'
] desc
'end
--如果是公升序查詢……
else
begin
set@strtmp='
>(select max
'set
@strorder='
order by ['+
@fldname+'
] asc
'end
if@strwhere
!=''
set@strsql='
select top '+
str(@pagesize) +
'* from ['+
@tblname+'
] where ['+
@fldname+'
]'+@strtmp+'
(['+@fldname+'
]) from (select top '+
str((@pageindex
-1)*
@pagesize) +'[
'+@fldname+'
] from ['+
@tblname+'
] where '+
@strwhere+'
'+@strorder+'
) as tbltmp) and '+
@strwhere+'
'+@strorder
else
set@strsql='
select top '+
str(@pagesize) +
'* from ['+
@tblname+'
] where ['+
@fldname+'
]'+@strtmp+'
(['+@fldname+'
]) from (select top '+
str((@pageindex
-1)*
@pagesize) +'[
'+@fldname+'
] from ['+
@tblname+'
]'+@strorder+'
) as tbltmp)'+
@strorder
endend
exec (@strsql
)go
執行儲存過程執行儲存過程use[
student]go
declare
@return_value
int--
宣告返回值變數
exec
@return_value=[
dbo].[
pgo_getrecordfrompage]--
返回值等於儲存過程返回結果
@tblname
= n'
t_stuinfo
', --
指定表名
@fldname
= n'
stuid
', --
指定排序的字段
@pagesize
=4, --
分頁大小
@pageindex
=2, --
頁碼@iscount
=0, --
是否返回記錄總數,當指定1時返回滿足strwhere條件的記錄總數
@ordertype
=0, --
排序型別0公升1降序
@strwhere
=" " --
where條件,不用寫where
select
'return value'=
@return_value
go
Sql 分頁語句
with temptb as select row number over order by id as rowid,from pagecut select from temptb where rowid between 2 50 and 2 50 50 這是乙個資料分頁方法,從sql2005起就支...
SQL分頁語句
這個分頁方法 sql分頁語句 本人對原作者的方案二做了小小的改動 原語句 select top 頁大小 from table1 where id select isnull max id 0 from select top 頁大小 頁數 1 id from table1 order by id a ...
SQL分頁語句
有關分頁 sql 的資料很多,有的使用儲存過程,有的使用游標。本人不喜歡使用游標,我覺得它耗資 效率低 使用儲存過程是個不錯的選擇,因為儲存過程是經過預編譯的,執行效率高,也更靈活。先看看單條 sql 語句的分頁 sql 吧。方法1 適用於 sql server 2000 2005 select t...