SQL Server兩種分頁(yè)的存儲(chǔ)過程使用介紹
由于現(xiàn)在很多的企業(yè)招聘的筆試都會(huì)讓來(lái)招聘的寫一個(gè)分頁(yè)的存儲(chǔ)過程,有的企業(yè)甚至要求應(yīng)聘者用兩種方式實(shí)現(xiàn)分頁(yè),如果沒有在實(shí)際項(xiàng)目中使用過分頁(yè),那么很多的應(yīng)聘者都會(huì)出現(xiàn)一定的問題,下面介紹兩種分頁(yè)的方法。
一、 以學(xué)生表為例,在數(shù)據(jù)庫(kù)中有一個(gè)Student表,字段有StudentNo, ,LoginPwd, StudentName,Sex,ClassId,Phone,Address,BornDate,Email,isDel
要求:查詢學(xué)生的信息,每頁(yè)顯示5條記錄
二、第一種方式分頁(yè):利用子查詢 not in
例如:
第一頁(yè)
select top 5 * from Student
第二頁(yè): 查詢前10條中不在前5條的記錄,那么就是6-10,也就是第二頁(yè)
select top 5 * from Student where StudentNo not in(select top 10 Studentno from Student)
同理可以得到第三頁(yè)、、、、、、、
這種方式相信大家都能明白,這種分頁(yè)的存儲(chǔ)過程寫法就不多做介紹,重點(diǎn)介紹下面那種分頁(yè)方法。
三、第二種方式分頁(yè):利用ROW_NUMBER()這個(gè)自帶的函數(shù)
因?yàn)樽?5之后,提供一個(gè)專門用于分頁(yè)的函數(shù),那就是ROW_NUMBER()這個(gè)函數(shù),分頁(yè)的基本語(yǔ)法:ROW_NUMBER() over(排序字段):可以根據(jù)指定的字段排序,對(duì)排序之后的結(jié)果集的每一行添加一個(gè)不間斷的行號(hào),相當(dāng)于連續(xù)的id值一樣,
例如sql語(yǔ)句:select ROW_NUMBER() over(order by studentno) id, * from Student 那么結(jié)果集可以看到:
那么我們可以看到id值是連續(xù)的,所有接下來(lái)的存儲(chǔ)過程寫起來(lái)就比較簡(jiǎn)單了。
注意:我們必須為這個(gè)結(jié)果集命一個(gè)新名字,比如我們命名為temp,那么分頁(yè)存儲(chǔ)過程可以寫出:
if exists( select * from sysobjects where name='usp_getPageData') drop proc usp_getPageData --如果存在名字為usp_getPageData的存儲(chǔ)過程則刪除 go create proc usp_getPageData --創(chuàng)建名字usp_getPageData存儲(chǔ)過程 @toPage int=0 output, --總頁(yè)數(shù) @pageIndex int =1 , --默認(rèn)顯示第一頁(yè) @pageCount int =5 --默認(rèn)每頁(yè)的記錄為5條 as select temp.StudentNo,temp.LoginPwd,temp.StudentName,temp.Sex,temp.ClassId,temp.Phone,temp.Address,temp.BornDate,temp.Email,temp.isDel from (select ROW_NUMBER() over (Order by studentno) id,* from Student) temp where id>(@pageIndex-1)*@pageCount and id<=@pageIndex*@pageCount set @toPage=ceiling((select COUNT(*) from Student)*1.0/@pageCount) --使用ceiling函數(shù)算出總頁(yè)數(shù) go
說(shuō)明因?yàn)樵趯?shí)際的項(xiàng)目的開發(fā)中,經(jīng)常要顯示總頁(yè)數(shù)給用戶看的,所有這里的存儲(chǔ)過程增加了一個(gè)toPage參數(shù),由于它是要輸出給用戶看的,所有參數(shù)類型定義為output,并用set進(jìn)行賦值。
以上是對(duì)兩種分頁(yè)方法的介紹,如果有任何疑問或不懂的可以留言給我。
- sql2005 存儲(chǔ)過程分頁(yè)代碼
- sqlserver 千萬(wàn)數(shù)量級(jí)分頁(yè)存儲(chǔ)過程代碼
- sql 存儲(chǔ)過程分頁(yè)代碼 支持億萬(wàn)龐大數(shù)據(jù)量
- SQL Server 2005通用分頁(yè)存儲(chǔ)過程及多表聯(lián)接應(yīng)用
- mssql 高效的分頁(yè)存儲(chǔ)過程分享
- 基于Sql Server通用分頁(yè)存儲(chǔ)過程的解決方法
- 深入sql server 2005 萬(wàn)能分頁(yè)存儲(chǔ)過程的詳解
- SQL Server 分頁(yè)查詢通用存儲(chǔ)過程(只做分頁(yè)查詢用)
- SqlServer 2000、2005分頁(yè)存儲(chǔ)過程整理
- 實(shí)現(xiàn)SQL分頁(yè)的存儲(chǔ)過程代碼
相關(guān)文章
SQL Server誤區(qū)30日談 第16天 數(shù)據(jù)的損壞和修復(fù)
我已經(jīng)聽過很多關(guān)于數(shù)據(jù)修復(fù)可以做什么、不可以做什么、什么會(huì)導(dǎo)致數(shù)據(jù)損壞以及損壞是否可以自行消失。其實(shí)我已經(jīng)針對(duì)這類問題寫過多篇博文,因此本篇博文可以作為“流言終結(jié)者”來(lái)做一個(gè)總結(jié),希望你能有收獲2013-01-01SQL Server的鏈接服務(wù)器技術(shù)小結(jié)
這篇文章主要介紹了SQL Server的鏈接服務(wù)器技術(shù)的相關(guān)資料,需要的朋友可以參考下2014-07-07sqlserver 查詢數(shù)據(jù)庫(kù)大小的方法
總部要求每一個(gè)月,獲取一次ERP數(shù)據(jù)庫(kù)增長(zhǎng)大小。我收到的樣版是一張截圖,是直接查看數(shù)據(jù)庫(kù)文件大小2012-08-08實(shí)現(xiàn)SQL分頁(yè)的存儲(chǔ)過程代碼
本文主要介紹了分頁(yè)的存儲(chǔ)過程所實(shí)現(xiàn)代碼,使用存儲(chǔ)過程可以提高效率與節(jié)約時(shí)間,需要的朋友可以參考下2015-08-08有關(guān)sqlserver帳號(hào)被禁用的處理方法
這篇文章主要介紹了有關(guān)sqlserver帳號(hào)被禁用處理方法,需要的朋友可以參考下2017-12-12sql server中datetime字段去除時(shí)間的語(yǔ)句
sql server中datetime字段去除時(shí)間的語(yǔ)句...2007-08-08SQL Server刪除表中的重復(fù)數(shù)據(jù)
這篇文章介紹了SQL Server刪除表中重復(fù)數(shù)據(jù)的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05