电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

自己改寫的一個sql server 2000的分頁存儲過程

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

優點如下,簡單,直接sql語句輸入,高效,效率很高測試過了,不過最好是主鍵排序,還有少用視圖 。

缺點也有,不支持復雜的sql語句,不能多字段排序,sql語句必須小于4000字符

/* 經測試,在 14483461 條記錄中查詢第 100000 頁,每頁 10 條記錄按升序和降序第一次時間均為 0.47 秒,第二次時間均為 0.43 秒,測試語法如下: exec GetRecordFromPage news,newsid,10,100000 news 為 表名, newsid 為關鍵字段, 使用時請先對 newsid 建立索引。*/

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

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

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)

-----統計總記錄數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;-----統計結束

--set @strOut=@strSQLGO

標簽: Sql Server 數據庫
主站蜘蛛池模板: 专注提供国外机电设备及配件-工业控制领域一站式服务商-深圳市华联欧国际贸易有限公司 | 中式装修设计_室内中式装修_【云臻轩】中式设计机构 | 合肥角钢_合肥槽钢_安徽镀锌管厂家-昆瑟商贸有限公司 | 创客匠人-让IP变现不走弯路| 日本细胞免疫疗法_肿瘤免疫治疗_NK细胞疗法 - 免疫密码 | Trimos测长机_测高仪_TESA_mahr,WYLER水平仪,PWB对刀仪-德瑞华测量技术(苏州)有限公司 | 船老大板材_浙江船老大全屋定制_船老大官网 | 聚合氯化铝-碱式氯化铝-聚合硫酸铁-聚氯化铝铁生产厂家多少钱一吨-聚丙烯酰胺价格_河南浩博净水材料有限公司 | 网带通过式抛丸机,,网带式打砂机,吊钩式,抛丸机,中山抛丸机生产厂家,江门抛丸机,佛山吊钩式,东莞抛丸机,中山市泰达自动化设备有限公司 | 免费个人pos机申请办理-移动pos机刷卡-聚合收款码办理 | 小青瓦丨古建筑瓦丨青瓦厂家-宜兴市徽派古典建筑材料有限公司 | 电动卫生级调节阀,电动防爆球阀,电动软密封蝶阀,气动高压球阀,气动对夹蝶阀,气动V型调节球阀-上海川沪阀门有限公司 | 天津次氯酸钠酸钙溶液-天津氢氧化钠厂家-天津市辅仁化工有限公司 | 插针变压器-家用电器变压器-工业空调变压器-CD型电抗器-余姚市中驰电器有限公司 | 彩超机-黑白B超机-便携兽用B超机-多普勒彩超机价格「大为彩超」厂家 | 恒温水槽与水浴锅-上海熙浩实业有限公司 | 山东氧化铁红,山东铁红-淄博科瑞化工有限公司 | 【黄页88网】-B2B电子商务平台,b2b平台免费发布信息网 | jrs高清nba(无插件)直播-jrs直播低调看直播-jrs直播nba-jrs直播 上海地磅秤|电子地上衡|防爆地磅_上海地磅秤厂家–越衡称重 | 欧版反击式破碎机-欧版反击破-矿山石料破碎生产线-青州奥凯诺机械 | 立刷【微电签pos机】-嘉联支付立刷运营中心 | 苏州工作服定做-工作服定制-工作服厂家网站-尺品服饰科技(苏州)有限公司 | 深圳市人通智能科技有限公司 | 全自动翻转振荡器-浸出式水平振荡器厂家-土壤干燥箱价格-常州普天仪器 | 蒸压釜_蒸养釜_蒸压釜厂家-山东鑫泰鑫智能装备有限公司 | 北京企业宣传片拍摄_公司宣传片制作-广告短视频制作_北京宣传片拍摄公司 | 大倾角皮带机-皮带输送机-螺旋输送机-矿用皮带输送机价格厂家-河南坤威机械 | 上海刑事律师|刑事辩护律师|专业刑事犯罪辩护律师免费咨询-[尤辰荣]金牌上海刑事律师团队 | 宝鸡市人民医院 | 岩石钻裂机-液压凿岩机-劈裂机-挖改钻_湖南烈岩科技有限公司 | 自清洗过滤器,浅层砂过滤器,叠片过滤器厂家-新乡市宇清净化 | 广东高华家具-公寓床|学生宿舍双层铁床厂家【质保十年】 | PC阳光板-PC耐力板-阳光板雨棚-耐力板雨棚,厂家定制[优尼科板材] | 骨密度检测仪_骨密度分析仪_骨密度仪_动脉硬化检测仪专业生产厂家【品源医疗】 | 广州/东莞小字符喷码机-热转印打码机-喷码机厂家-广州瑞润科技 | 模温机-油温机-电加热导热油炉-工业冷水机「欧诺智能」 | 专业深孔加工_东莞深孔钻加工_东莞深孔钻_东莞深孔加工_模具深孔钻加工厂-东莞市超耀实业有限公司 | 滑板场地施工_极限运动场地设计_滑板公园建造_盐城天人极限运动场地建设有限公司 | 真空干燥烘箱_鼓风干燥箱 _高低温恒温恒湿试验箱_光照二氧化碳恒温培养箱-上海航佩仪器 | 球盟会·(中国)官方网站| 小型UV打印机-UV平板打印机-大型uv打印机-UV打印机源头厂家 |松普集团 |