国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

SQL Server兩種分頁的存儲過程介紹

2024-08-31 00:55:33
字體:
來源:轉載
供稿:網友
SQL Server兩種分頁的存儲過程介紹

由于現在很多的企業招聘的筆試都會讓來招聘的寫一個分頁的存儲過程,有的企業甚至要求應聘者用兩種方式實現分頁,如果沒有在實際項目中使用過分頁,那么很多的應聘者都會出現一定的問題,下面介紹兩種分頁的方法。

一、 以學生表為例,在數據庫中有一個Student表,字段有StudentNo, ,LoginPwd, StudentName,Sex,ClassId,Phone,Address,BornDate,Email,isDel

要求:查詢學生的信息,每頁顯示5條記錄

二、第一種方式分頁:利用子查詢 not in

例如:

第一頁

select top 5 * from Student

第二頁: 查詢前10條中不在前5條的記錄,那么就是6-10,也就是第二頁

select top 5 * from Student where StudentNo not in(select top 5 Studentno from Student)

同理可以得到第三頁、、、、、、、

這種方式相信大家都能明白,這種分頁的存儲過程寫法就不多做介紹,重點介紹下面那種分頁方法。

三、第二種方式分頁:利用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進行賦值。

以上是對兩種分頁方法的介紹,如果有任何疑問或不懂的可以留言給我。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宜丰县| 清新县| 襄垣县| 页游| 永兴县| 眉山市| 潼关县| 虎林市| 龙里县| 安平县| 庐江县| 上蔡县| 老河口市| 韶关市| 汉川市| 嘉兴市| 平邑县| 天全县| 江油市| 沂源县| 澜沧| 松阳县| 盐源县| 泽普县| 新野县| 永德县| 台中县| 绩溪县| 志丹县| 沁阳市| 洛阳市| 秦皇岛市| 军事| 息烽县| 德兴市| 家居| 福海县| 公主岭市| 宁强县| 榕江县| 洛宁县|