近300万记录的论坛还用这个分页存储过程
生活随笔
收集整理的這篇文章主要介紹了
近300万记录的论坛还用这个分页存储过程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
http://www2.gliet.edu.cn/club2/bbs/list_new_today.asp
用于列出今日最新貼的。
有個想不明的問題是為什么
Declare?@SqlText?Varchar(1000)
聲明為1000個字符大了,但超過255字符之后exec(@SqlText)就會出錯。
自動把后面的cut掉了?
ALTER????PROCEDURE?bbsListNewToday
@curPage??int?=?0,?--當前頁
@PageSize?int?=?30--每頁記錄數
--@ForumID?varchar(4)?='',--每頁記錄數
--@condition?varchar(200)='',
--@tolRecord??int?output ado.command對象返回記錄集時就不能用輸出參數了
AS
begin
set?nocount?on
declare?@StartRecord?int????
declare?@EndRecord?int????
Declare?@SqlText?Varchar(1000)
Declare?@selCol?Varchar(1000)
Declare?@fcondition?varchar(1000)
Declare?@sPageSize?varchar(10)
Declare?@tolRecord??int
if?@curPage>0
begin
????set?@curPage?=?@curPage-1
end
set?@StartRecord?=?@curPage?*?@PageSize
set?@EndRecord?=?(@curPage?+1?)?*?@PageSize
set?@fcondition='?where?boards.[user]=bbs.owner?'
set?@sPageSize?=?CAST(?@PageSize?AS?varchar(30))?
--select?len(@condition)
--返回總貼數
?set?@tolRecord=(select?sum(totalCount)?from?boards)
--set?@SqlText?='select?top?'+?CAST(?@pageSize?AS?varchar(30))??+'??*?from?bbs?order?by?id?desc'
set?@selCol?=?N'?bbs.[id]?bbsid,TopID,[Owner]?boardID,Layer,Click,[Time]?postTime,Topic,bbs.[Name]?poster,TxtLong,Face,IsBest,IsTop,subject?boardName'
if?@curPage=0
begin
????set?@SqlText?='select?top??'+@sPageSize?+'?'+CAST(?@tolRecord?AS?varchar(10))+'?as?tolRecord,'+?@selCol+'?from?bbs,boards?'?+?@fcondition+'?order?by?bbsid?desc'
end
else
begin
????set?@SqlText?='select?'+CAST(?@tolRecord?AS?varchar(10))+'?as?tolRecord,*?from(?select?top?'+CAST(?@sPageSize?AS?varchar(10))+'?*?from(?select?top?'+CAST(?@EndRecord?AS?varchar(10))+@selCol+'?from?bbs,boards?'+@fcondition+'?order?by?bbsid?desc?)?a?order?by?bbsid??)?b?order?by?bbsid?desc'
end
exec(@SqlText)
set?nocount?off????
end
GO
用于列出今日最新貼的。
有個想不明的問題是為什么
Declare?@SqlText?Varchar(1000)
聲明為1000個字符大了,但超過255字符之后exec(@SqlText)就會出錯。
自動把后面的cut掉了?
ALTER????PROCEDURE?bbsListNewToday
@curPage??int?=?0,?--當前頁
@PageSize?int?=?30--每頁記錄數
--@ForumID?varchar(4)?='',--每頁記錄數
--@condition?varchar(200)='',
--@tolRecord??int?output ado.command對象返回記錄集時就不能用輸出參數了
AS
begin
set?nocount?on
declare?@StartRecord?int????
declare?@EndRecord?int????
Declare?@SqlText?Varchar(1000)
Declare?@selCol?Varchar(1000)
Declare?@fcondition?varchar(1000)
Declare?@sPageSize?varchar(10)
Declare?@tolRecord??int
if?@curPage>0
begin
????set?@curPage?=?@curPage-1
end
set?@StartRecord?=?@curPage?*?@PageSize
set?@EndRecord?=?(@curPage?+1?)?*?@PageSize
set?@fcondition='?where?boards.[user]=bbs.owner?'
set?@sPageSize?=?CAST(?@PageSize?AS?varchar(30))?
--select?len(@condition)
--返回總貼數
?set?@tolRecord=(select?sum(totalCount)?from?boards)
--set?@SqlText?='select?top?'+?CAST(?@pageSize?AS?varchar(30))??+'??*?from?bbs?order?by?id?desc'
set?@selCol?=?N'?bbs.[id]?bbsid,TopID,[Owner]?boardID,Layer,Click,[Time]?postTime,Topic,bbs.[Name]?poster,TxtLong,Face,IsBest,IsTop,subject?boardName'
if?@curPage=0
begin
????set?@SqlText?='select?top??'+@sPageSize?+'?'+CAST(?@tolRecord?AS?varchar(10))+'?as?tolRecord,'+?@selCol+'?from?bbs,boards?'?+?@fcondition+'?order?by?bbsid?desc'
end
else
begin
????set?@SqlText?='select?'+CAST(?@tolRecord?AS?varchar(10))+'?as?tolRecord,*?from(?select?top?'+CAST(?@sPageSize?AS?varchar(10))+'?*?from(?select?top?'+CAST(?@EndRecord?AS?varchar(10))+@selCol+'?from?bbs,boards?'+@fcondition+'?order?by?bbsid?desc?)?a?order?by?bbsid??)?b?order?by?bbsid?desc'
end
exec(@SqlText)
set?nocount?off????
end
GO
轉載于:https://www.cnblogs.com/wuchang/archive/2004/08/20/35192.html
總結
以上是生活随笔為你收集整理的近300万记录的论坛还用这个分页存储过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue 基于网易云API实现二维码的登录
- 下一篇: 参考资料