SQL Server兩種分頁的存儲進程應用引見。本站提示廣大學習愛好者:(SQL Server兩種分頁的存儲進程應用引見)文章只能為提供參考,不一定能成為您想要的結果。以下是SQL Server兩種分頁的存儲進程應用引見正文
因為如今許多的企業雇用的口試都邑讓來雇用的寫一個分頁的存儲進程,有的企業乃至請求應聘者用兩種方法完成分頁,假如沒有在現實項目中應用過火頁,那末許多的應聘者都邑湧現必定的成績,上面引見兩種分頁的辦法。
1、 以先生表為例,在數據庫中有一個Student表,字段有StudentNo, ,LoginPwd, StudentName,Sex,ClassId,Phone,Address,BornDate,Email,isDel
請求:查詢先生的信息,每頁顯示5筆記錄
2、第一種方法分頁:應用子查詢 not in
例如:
第一頁
select top 5 * from Student
第二頁: 查詢前10條中不在前5條的記載,那末就是6-10,也就是第二頁
select top 5 * from Student where StudentNo not in(select top 10 Studentno from Student)
同理可以獲得第三頁、、、、、、、
這類方法信任年夜家都能明確,這類分頁的存儲進程寫法就不多做引見,重點引見上面那種分頁辦法。
3、第二種方法分頁:應用ROW_NUMBER()這個自帶的函數
由於自05以後,供給一個專門用於分頁的函數,那就是ROW_NUMBER()這個函數,分頁的根本語法:ROW_NUMBER() over(排序字段):可以依據指定的字段排序,對排序以後的成果集的每行添加一個不連續的行號,相當於持續的id值一樣,
例如sql語句:select ROW_NUMBER() over(order by studentno) id, * from Student 那末成果集可以看到:
那末我們可以看到id值是持續的,一切接上去的存儲進程寫起來就比擬簡略了。
留意:我們必需為這個成果集命一個新名字,好比我們定名為temp,那末分頁存儲進程可以寫出:
if exists( select * from sysobjects where name='usp_getPageData') drop proc usp_getPageData --假如存在名字為usp_getPageData的存儲進程則刪除 go create proc usp_getPageData --創立名字usp_getPageData存儲進程 @toPage int=0 output, --總頁數 @pageIndex int =1 , --默許顯示第一頁 @pageCount int =5 --默許每頁的記載為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函數算出總頁數 go
解釋由於在現實的項目標開辟中,常常要顯示總頁數給用戶看的,一切這裡的存儲進程增長了一個toPage參數,因為它是要輸入給用戶看的,一切參數類型界說為output,並用set停止賦值。
以上是對兩種分頁辦法的引見,假如有任何疑問或不懂的可以留言給我。