久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

自己改寫(xiě)的一個(gè)sql server 2000的分頁(yè)存儲(chǔ)過(guò)程

瀏覽:153日期:2023-11-01 18:25:17

優(yōu)點(diǎn)如下,簡(jiǎn)單,直接sql語(yǔ)句輸入,高效,效率很高測(cè)試過(guò)了,不過(guò)最好是主鍵排序,還有少用視圖 。

缺點(diǎn)也有,不支持復(fù)雜的sql語(yǔ)句,不能多字段排序,sql語(yǔ)句必須小于4000字符

/* 經(jīng)測(cè)試,在 14483461 條記錄中查詢第 100000 頁(yè),每頁(yè) 10 條記錄按升序和降序第一次時(shí)間均為 0.47 秒,第二次時(shí)間均為 0.43 秒,測(cè)試語(yǔ)法如下: exec GetRecordFromPage news,newsid,10,100000 news 為 表名, newsid 為關(guān)鍵字段, 使用時(shí)請(qǐng)先對(duì) newsid 建立索引。*/

/* 函數(shù)名稱: GetRecordFromPage 函數(shù)功能: 獲取指定頁(yè)的數(shù)據(jù) 參數(shù)說(shuō)明: @tblName;;;包含數(shù)據(jù)的表名 @fldName;;;關(guān)鍵字段名 @PageSize;;每頁(yè)記錄數(shù) @PageIndex;要獲取的頁(yè)碼 @OrderType;排序類型, 0 - 升序, 1 - 降序 @strWhere;;查詢條件 (注意: 不要加 where) 作者: 鐵拳 郵箱: sunjianhua_kki@sina.com 創(chuàng)建時(shí)間: 2004-07-04 修改時(shí)間: 2004-07-04 http://blog.knowsky.com/*/CREATEPROCEDURE GetRecordFromPage1 @SQL;;varchar(8000),;;;-- SQL語(yǔ)句 @PageSize;;int = 10,-- 頁(yè)尺寸 @PageIndex;int = 1,;-- 頁(yè)碼 --@strOut varchar(6000) output 輸出處理完成的SQL語(yǔ)句 @RecordCount; int = 0 output;;;-- 輸出總記錄數(shù)AS

declare @strSQLvarchar(8000);;;;-- 最后獲取的SQL語(yǔ)句declare @strTmpvarchar(8000);;;;-- 臨時(shí)變量declare @strOrder varchar(500);;;;;-- 排序類型declare @tblName; varchar(255);;;;;-- 表名declare @fldName; varchar(255);;;;;-- 字段名declare @strWhere varchar(8000);;;;-- 查詢條件 (注意: 不要加 where)declare @tmpOrder varchar(255);;;;;-- 排序字符串臨時(shí)變量declare @strFilds varchar(8000);;;;-- 需要顯示的列declare @intFilds int;;;-- 顯示的列所在位置declare @intOrder int -- 排序字符串位置declare @intSQLint;;;-- SQL語(yǔ)句長(zhǎng)度declare @intWhere int -- where字符串位置declare @intTable int;;;-- 表名稱位置declare @strRsSql nvarchar(4000);;;-- 統(tǒng)計(jì)總記錄數(shù)sql語(yǔ)句

set @intOrder=CharIndex('order by',@SQL)set @intSQL=Len(@SQL)

set @intFilds=CharIndex('select',@SQL)set @strFilds=SubString(@SQL,@intFilds+7,@intSQL-@intFilds-1)set @strFilds=SubString(@strFilds,1,CharIndex('from',@strFilds)-1)

set @tblName=SubString(@SQL,CharIndex('from',@SQL)+5,@intSQL-CharIndex('from',@SQL)+5)set @intTable=CharIndex(' ',@tblName)if @intTable>0begin set @tblName=SubString(@tblName,1,@intTable-1)end

set @intWhere=CharIndex('where ',@SQL)if @intWhere>0begin if @intOrder>0 begin set @strWhere=SubString(@SQL,@intWhere+6,@intOrder-@intWhere-7) end else begin set @strWhere=SubString(@SQL,@intWhere+6,@intSQL-@intWhere-5) endendelsebegin set @strWhere=''end

if @intOrder>0begin set @strOrder=' '+SubString(@SQL,@intOrder,@intSQL-@intOrder+1) set @tmpOrder=SubString(@strOrder,11,Len(@strOrder)-10) if CharIndex(' ',@tmpOrder)>0 begin set @fldName=SubString(@tmpOrder,1,CharIndex(' ',@tmpOrder)-1) end else begin set @fldName=@tmpOrder end if CharIndex('desc',@SQL)>0 begin set @strTmp='<(select min' end else begin set @strTmp='>(select max' endendelsebegin set @fldName='ID' set @strTmp = '>(select max' set @strOrder = ' order by [' + @fldName +'] asc'end

set @strSQL = 'select top ' + LTrim(str(@PageSize)) + ' '+@strFilds+' from [' + @tblName + '] where [' + @fldName + ']' + @strTmp + '([' + @fldName + ']) from (select top ' + LTrim(str((@PageIndex-1)*@PageSize)) + ' [' + @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)' + @strOrder

if @strWhere != '' set @strSQL = 'select top ' + LTrim(str(@PageSize)) + ' '+@strFilds+' from [' + @tblName + '] where [' + @fldName + ']' + @strTmp + '([' + @fldName + ']) from (select top ' + LTrim(str((@PageIndex-1)*@PageSize)) + ' [' + @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' ' + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder

if @PageIndex = 1begin set @strTmp = '' if @strWhere != '' set @strTmp = ' where (' + @strWhere + ')'

set @strSQL = 'select top ' + LTrim(str(@PageSize)) + ' '+@strFilds+' from [' + @tblName + ']' + @strTmp + ' ' + @strOrderend

exec (@strSQL)

-----統(tǒng)計(jì)總記錄數(shù)if @strWhere!=''begin set @strRsSql='select @RecordCount=count('+@fldName+') from ['+@tblName +'] where ('+@strWhere+')'endelsebegin set @strRsSql='select @RecordCount=count('+@fldName+') from ['+@tblName +']'endEXEC sp_executesql @strRsSql,N'@RecordCount int out',@RecordCount out;-----統(tǒng)計(jì)結(jié)束

--set @strOut=@strSQLGO

主站蜘蛛池模板: 99精品不卡 | www一起操 | 亚洲精选一区 | 成人免费av | 国产精品久久久久久婷婷天堂 | 97av在线| 国产成人久久精品麻豆二区 | 日本在线观看网站 | 国产无套一区二区三区久久 | 天天操妹子 | 久久精品网| 久草免费在线 | 美女三区| 欧美色视频在线观看 | 欧美一区二区三区四区视频 | 国产精品成人一区二区 | 日韩av手机在线免费观看 | 精品无码久久久久国产 | 性欧美久久久 | 日韩久久久久久 | 中国av在线 | 黄网在线观看 | 成人免费福利 | 久久99操 | 美日韩成人 | 精品久久久久久久久久久久包黑料 | 91爱啪啪 | 视频一区二区中文字幕 | 亚洲成人基地 | 国产精品丝袜一区二区 | 天天操天天干天天爽 | 国产98色在线 | 日韩 | 波多野结衣先锋影音 | 狠狠的干 | 久久全国免费视频 | 国产日韩欧美在线 | 日本做暖暖视频高清观看 | 精品久久久久久国产三级 | 古典武侠第一页久久777 | 四虎永久免费影院 | 国产精品毛片一区二区三区 |