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

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

MS SQL Server 2005 開發之分頁存儲過程

瀏覽:150日期:2023-11-01 16:51:27
在工作中經常會用到分頁顯示數據,如果使用.NET開發,可以使用DataGrid控件的分頁功能,也可以使用PagedDataSource類來輔助完成。但這兩種方式都將從數據庫中獲取所有的記錄,將記錄數目較大時,效率很低,因此直接使用存儲過程來進行分頁,則將會提供更好的性能。在CSDN的數據庫開發社區,有許多大俠都寫出了自己的分頁存儲過程,經過整理之后,給一個完整的例子。 首先創建一個分頁存儲過程,下面的分頁存儲過程是在pbsql大俠提供的分頁存儲過程的基礎上修改而成的。CREATEPROCEDUREsp_page @strTable;;;;varchar(50),--表名 @strColumn;;;varchar(50),--按該列來進行分頁 @intColType;;int,--@strColumn列的類型,0-數字類型,1-字符類型,2-日期時間類型 @intOrder;;;;bit,--排序,0-順序,1-倒序 @strColumnlist varchar(800), --要查詢出的字段列表,*表示全部字段 @intPageSize;int,--每頁記錄數 @intPageNum;;int,--指定頁 @strWhere;;;;varchar(800), --查詢條件 @intPageCountintOUTPUT--總頁數AS DECLARE@sql;nvarchar(4000) --用于構造SQL語句DECLARE@where1 varchar(800)--構造條件語句DECLARE@where2 varchar(800)--構造條件語句IF@strWhereisnullorrtrim(@strWhere)=''-- 為了避免SQL關鍵字與字段、表名等連在一起,首先為傳入的變量添加空格BEGIN; --沒有查詢條件 SET@where1=' WHERE ' SET@where2=' 'ENDELSEBEGIN; --有查詢條件 SET@where1=' WHERE ('+@strWhere+') AND ' SET@where2=' WHERE ('+@strWhere+') 'END set @strColumn = ' ' + @strColumn + ' 'set @strColumnlist = ' ' + @strColumnlist + ' '--構造SQL語句,計算總頁數。計算公式為 總頁數 = Ceiling ( 記錄個數 / 頁大小 ) http://www.mypchelp.cnSET@sql='SELECT@intPageCount=CEILING((COUNT(*)+0.0)/' + CAST(@intPageSizeASvarchar) + ')FROM' + @strTable + @where2--執行SQL語句,計算總頁數,并將其放入@intPageCount變量中EXEC sp_executesql @sql,N'@intPageCountintOUTPUT',@intPageCountOUTPUT --將總頁數放到查詢返回記錄集的第一個字段前,此語句可省略SET; @strColumnlist= Cast(@intPageCount as varchar(30)) + ' as PageCount,' + @strColumnlistIF@intOrder=0--構造升序的SQL SET @sql='SELECT TOP '+ CAST(@intPageSizeASvarchar) + @strColumnlist + ' FROM ' + @strTable + @where1 + @strColumn + '>(SELECT MAX('+@strColumn+') '+ ' FROM (SELECT TOP '+ CAST(@intPageSize*(@intPageNum - 1) AS; varchar) + @strColumn + ' FROM '+ @strTable+@where2+'ORDER BY '+@strColumn+') t) ORDER BY '+ @strColumnELSE;;;--構造降序的SQL SET @sql='SELECT TOP '+ CAST(@intPageSizeASvarchar) + @strColumnlist+ ' FROM '+ @strTable + @where1 + @strColumn + '<(SELECTMIN('+@strColumn+')'+ ' FROM (SELECT TOP '+ CAST(@intPageSize*(@intPageNum - 1) AS; varchar) + @strColumn + ' FROM '+ @strTable+@where2+'ORDERBY '+@strColumn+' DESC)t)ORDERBY'+ @strColumn + ' DESC';;;;;IF@intPageNum=1--第一頁 SET@sql='SELECTTOP'+CAST(@intPageSizeASvarchar) + @strColumnlist + ' FROM '+@strTable+ @where2+'ORDERBY'+@strColumn+CASE @intOrder WHEN; 0 THEN; '' ELSE; ' DESC' END--PRINT@sqlEXEC(@sql)GO下面創建一個數據表,進行測試,并向表中添加123個測試數據。if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[myUser]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)drop table [dbo].[myUser]GOCREATE TABLE [dbo].[myUser] ( [UserId] [int] IDENTITY (1, 1) NOT NULL , [UserName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ) ON [PRIMARY]GOdeclare @i intset @i=1while ( @i <= 123 )begin insert into myUser (UserName) values ( 'test' + cast(@i as varchar(6))) set @i = @i + 1end調用存儲過程declare@ointexecsp_page'myUser','UserId',0,0,'*',15,1,'',@ooutputexecsp_page'myUser','UserId',0,0,'*',15,9,'',@ooutput如果在.Net中,可以使用輸出參數。下面給出C#的從存儲過程中輸出參數的例子 ...... int iPage=1; SqlCommand cmd = new SqlCommand('sp_page', conn ); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add('@strTable', 'myUser'); cmd.Parameters.Add('@strColumn', 'UserId'); cmd.Parameters.Add('@intColType', 0); cmd.Parameters.Add('@intOrder', 0); cmd.Parameters.Add('@strColumnlist', '*'); cmd.Parameters.Add('@intPageSize', 15); cmd.Parameters.Add('@intPageNum', iPage); cmd.Parameters.Add('@strWhere', ''); SqlParameter paramPageCount = cmd.Parameters.Add('@intPageCount', SqlDbType.Int); paramPageCount.Direction = ParameterDirection.Output; //可以改為ExecuteReader() cmd.ExecuteNonQuery(); Response.Write(paramPageCount.Value.ToString()); http://blog.csdn.net/mengyao/archive/2007/02/16/1511276.aspx
標簽: Sql Server 數據庫
主站蜘蛛池模板: 昆山PCB加工_SMT贴片_PCB抄板_线路板焊接加工-昆山腾宸电子科技有限公司 | 首页 - 张店继勇软件开发工作室 兰州UPS电源,兰州山特UPS-兰州万胜商贸 | 数字展示在线_数字展示行业门户网站 | 世纪豪门官网 世纪豪门集成吊顶加盟电话 世纪豪门售后电话 | 温湿度记录纸_圆盘_横河记录纸|霍尼韦尔记录仪-广州汤米斯机电设备有限公司 | 淬火设备-钎焊机-熔炼炉-中频炉-锻造炉-感应加热电源-退火机-热处理设备-优造节能 | 定硫仪,量热仪,工业分析仪,马弗炉,煤炭化验设备厂家,煤质化验仪器,焦炭化验设备鹤壁大德煤质工业分析仪,氟氯测定仪 | 耐破强度测试仪-纸箱破裂强度试验机-济南三泉中石单品站 | 广东高华家具-公寓床|学生宿舍双层铁床厂家【质保十年】 | 江苏远邦专注皮带秤,高精度皮带秤,电子皮带秤研发生产 | 气动隔膜泵厂家-温州永嘉定远泵阀有限公司 | 压装机-卧式轴承轮轴数控伺服压装机厂家[铭泽机械] | 同学聚会纪念册制作_毕业相册制作-成都顺时针宣传画册设计公司 | 氧化锆陶瓷_氧化锆陶瓷加工_氧化锆陶瓷生产厂家-康柏工业陶瓷有限公司 | 胶辊硫化罐_胶鞋硫化罐_硫化罐厂家-山东鑫泰鑫智能装备有限公司 意大利Frascold/富士豪压缩机_富士豪半封闭压缩机_富士豪活塞压缩机_富士豪螺杆压缩机 | 上海小程序开发-小程序制作-上海小程序定制开发公司-微信商城小程序-上海咏熠 | 骨密度仪-骨密度测定仪-超声骨密度仪-骨龄测定仪-天津开发区圣鸿医疗器械有限公司 | ASA膜,ASA共挤料,篷布色母料-青岛未来化学有限公司 | 【化妆品备案】进口化妆品备案流程-深圳美尚美化妆品有限公司 | elisa试剂盒价格-酶联免疫试剂盒-猪elisa试剂盒-上海恒远生物科技有限公司 | 铝扣板-铝方通-铝格栅-铝条扣板-铝单板幕墙-佳得利吊顶天花厂家 elisa试剂盒价格-酶联免疫试剂盒-猪elisa试剂盒-上海恒远生物科技有限公司 | 防水套管_柔性防水套管_刚性防水套管-巩义市润达管道设备制造有限公司 | Dataforth隔离信号调理模块-信号放大模块-加速度振动传感器-北京康泰电子有限公司 | 示波器高压差分探头-国产电流探头厂家-南京桑润斯电子科技有限公司 | PE一体化污水处理设备_地埋式生活污水净化槽定制厂家-岩康塑业 | 【MBA备考网】-2024年工商管理硕士MBA院校/报考条件/培训/考试科目/提前面试/考试/学费-MBA备考网 | 电磁辐射仪-电磁辐射检测仪-pm2.5检测仪-多功能射线检测仪-上海何亦仪器仪表有限公司 | 泉州陶瓷pc砖_园林景观砖厂家_石英砖地铺石价格 _福建暴风石英砖 | X光检测仪_食品金属异物检测机_X射线检测设备_微现检测 | 20年条刷老厂-条刷-抛光-工业毛刷辊-惠众毛刷 | 连续密炼机_双转子连续密炼机_连续式密炼机-南京永睿机械制造有限公司 | 喷码机,激光喷码打码机,鸡蛋打码机,手持打码机,自动喷码机,一物一码防伪溯源-恒欣瑞达有限公司 | 电渗析,废酸回收,双极膜-山东天维膜技术有限公司 | 板框压滤机-隔膜压滤机-厢式压滤机生产厂家-禹州市君工机械设备有限公司 | 检验科改造施工_DSA手术室净化_导管室装修_成都特殊科室建设厂家_医疗净化工程公司_四川华锐 | 干粉砂浆设备-干粉砂浆生产线-干混-石膏-保温砂浆设备生产线-腻子粉设备厂家-国恒机械 | 热熔胶网膜|pes热熔网膜价格|eva热熔胶膜|热熔胶膜|tpu热熔胶膜厂家-苏州惠洋胶粘制品有限公司 | 免费分销系统 — 分销商城系统_分销小程序开发 -【微商来】 | 石家庄网站建设|石家庄网站制作|石家庄小程序开发|石家庄微信开发|网站建设公司|网站制作公司|微信小程序开发|手机APP开发|软件开发 | POM塑料_PBT材料「进口」聚甲醛POM杜邦原料、加纤PBT塑料报价格找利隆塑料 | 宏源科技-房地产售楼系统|线上开盘系统|售楼管理系统|线上开盘软件 |