資源描述:
《dnt分頁存儲(chǔ)過程解析》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、DNT的幾個(gè)分頁存儲(chǔ)過程解析在DNT安裝時(shí)會(huì)創(chuàng)建一些存儲(chǔ)過程,用于完成DNT的功能。這些存儲(chǔ)過程位于、upload_filesinstallsqlscriptsqlserver文件夾中的setup2.2-2005.sql文件中。其屮的分頁存儲(chǔ)過程如下:我認(rèn)識(shí)存儲(chǔ)過程這個(gè)東西不久,仔細(xì)看了下,注釋出來.下邊列舉的4個(gè)分頁存儲(chǔ)過程,寫法風(fēng)格各不相同.在算法上只有兩種.一個(gè)使用了ROW_NUMBER()OVER(ORDERBY[aid]DESC)ASROWID這個(gè)函數(shù).另一個(gè)手動(dòng)計(jì)算頁碼,將該頁的所有數(shù)據(jù)以DESC的方式選到一個(gè)臨時(shí)表中.再在這個(gè)表中搜索Top數(shù)據(jù).然后返回
2、.從風(fēng)格上講,前兩個(gè)使用了很多參數(shù)來組織語句,代碼美觀大方.后兩個(gè)先組織了Sql字符串,加入搜索條件后才使用EXEC語句執(zhí)行.代碼亂七八糟的,不是很好看,但也實(shí)現(xiàn)了功能.(1)dnt_getfavoriteslist獲取用戶收藏的存儲(chǔ)過程這個(gè)存儲(chǔ)過程用于查看用戶收藏是的分頁顯示?返回一個(gè)包含帖子主題的表供前臺(tái)調(diào)用CREATEPROCEDURE[dnt_getfavoriteslist]--分頁獲取收藏主題表QuidINT,--用戶:ED@pagesizeINT,--頁大小QpageindexINT―第幾頁AS—SELECT[f].[uid],[f].[tid],[topic
3、s].[titie],[topics].[poster],[topics].[postdatetime],[topics].[replies],[topics].[views],[topics].[posterid]FROM[dnt_favorites][f]LEFTJOIN[dnt_topics][topics]ON[f].[tid]=[topics].[tid]WHERE[f].[typeid]=0AND[f].[uid]=@uidIFQpageindex=1--處理第一頁BEGINSELECTTOP(@pagesize)--因?yàn)槭堑谝豁?,選擇出前@pagesize就是
4、所需要的內(nèi)容[uid]/[tid],[title]/[poster],[postdatetime],[replies],[views],[posterid]FROM(SELECT[f].[uid],--這個(gè)Select用于選出用八用八所有的收藏[f]代表表[dnt_favorites]?[topics]代表[dnt_topics]--兩個(gè)表連接起來查詢出用戶收藏的所有主題[f].[tid],[topics]?[title]/[topics]?[poster],[topics]?[postdatetime]z[topics]?[replies].[topics]?[views
5、],[topics]?[posterid]FROM[dnt_favorites][f]―此處設(shè)置f代表[dnt_favorites]LEFTJOIN[dnt_topics][topics]ON[f]?[tid]=[topics]?[tid]WHERE[f].[typeid]=0AND[f]?[uid]=@uid)favorites--此處的favorites相當(dāng)于一個(gè)表。From語句后邊的SELECT語句選擇出來的內(nèi)容存放著這個(gè)表中ORDERBY[tid]DESCENDELSEBEGIN--gpageindex不等于1,處理其他頁SELECTTOP(Qpagesize)--
6、不是第一頁,需要對(duì)選擇出來內(nèi)容的范圉加以約束。Where之后未約束FROMWHERE[uid]/[tid],[title]z[poster],[postdatetime]A[replies],[views]/[posterid](SELECT[f].[uid],[f]?[tid],[topics].[title]/[topics]?[poster],[topics]?[posz[topics]?[replies],[topics]?[views],[topics]?[posterid]FROM[dnt_favorites][f]LEFTJOIN[dnt_topics][to
7、pics]ON[f].[tid]=[topics]?[tid]WHERE[f]?[typeid]=0AND[f].[uid]=@uid)fl[tid]<(SELECTMIN([tid])--根據(jù)頁大小和頁序號(hào)設(shè)置TID的范圍FROM(SELECTTOP((@pageindex-1)*Qpagesize)[tid]查詢FROM(SELECT[f].[uid],--這里跟處理第一頁一樣,選擇出所有收藏的內(nèi)容作為一個(gè)表,供[f].[tid],[topics]?[titie],[topics]?[poster],[topi