- 浏览: 457158 次
- 性别:
- 来自: 潘多拉
文章分类
最新评论
-
lijunwyf:
代码好像不完整,后端没串起来的感觉
Json-RPC for java首次尝试 -
jerry.chen:
我用这种方式去,貌似没啥效果,楼主!
Xfire开发的webservice客户端超时问题解决 -
漫步邃思:
这个问题常遇到,老是想不起来解决方法,记住了
resin3.1.0无法解析EL表达式问题解决 -
dampce032:
在不删掉integratedSecurity=true;的情况 ...
JDBC 连接SQLServer数据库(Failed to load the sqljdbc_auth.dll) -
kill_e680:
取CPU号和取硬盘号,在linux下可以用吗?
sigar使用:在web中应用sigar取得系统信息
------------------------------------------------------------ -- --通用的分页存储过程 -- ------------------------------------------------------------- CREATE PROCEDURE [dbo].[kk_fenyetwo] @CurrentPage int, --@CurrentPage为显示那一页 @PageSize int,--@PageSize为每一页显示几行 @Tcount int, @Field_Info varchar(500),--@Field_info为要显示的字段可以为* @Table_info varchar(500),--@Table_info为要查询的表或视图 @OtherTable varchar(1000), @Field_id varchar(1000),--@field_id为按这个字段排序 @intOrder int,--@intorder0为升序排1为降序排 @otherwhere varchar(1000),--@otherwhere为条件 @RecordCount int output,--@RecordCount为总行数 @PageCount int output--@PageCount为总页数 AS begin DECLARE @MinPage int, @MaxPage int declare @sql varchar(1000) declare @sqlt nvarchar(300) declare @order varchar(4) declare @strWhere varchar(100) declare @sqlp varchar(1000) set @Field_Info = replace(@Field_Info,'''','') --除去@field_info中的' set @Table_info = replace(@table_info,'''','') --除去@table_info中的' set @Field_id = replace(@Field_id,'''','') --除去@field_id中的' set @otherwhere = @otherwhere --将@otherwhere中的'换成''让SQL语句正确释别' set @strWhere=' Where (1=1) ' if @Tcount=1 set @sqlt = 'SELECT @RecordCount = COUNT(*) FROM ' + @Table_Info else set @sqlt = 'SELECT @RecordCount = COUNT(*) FROM ' + @Table_Info + @OtherTable if @otherwhere like '' set @sqlt = @sqlt else set @sqlt = @sqlt+@strWhere+@otherwhere --print @sqlt exec sp_executesql @sqlt,N'@RecordCount int output',@RecordCount output --如何将exec执行结果放入变量中,如果是字符串就要用N,N后面的变量一定要和@sqlt里面的变量同名 IF @PageSize <= 0 begin set @PageSize = 10 end else if @PageSize > @RecordCount begin set @pageSize = @RecordCount end if @RecordCount=0 set @pagecount=0 else begin set @pagecount = @RecordCount / @PageSize if ((@RecordCount % @pagesize) != 0) --如果除不尽则加一页 begin set @PageCount = @RecordCount / @PageSize set @PageCount = @pagecount + 1 end else begin set @pagecount = @RecordCount /@PageSize end end IF @CurrentPage <= 0 begin set @CurrentPage = 1 end else if @CurrentPage > @pagecount begin set @currentpage = @pagecount --如果输入页数大于总页数则符最后一页 end SET @MinPage = (@CurrentPage - 1) * @PageSize + 1 SET @MaxPage = @MinPage + @PageSize - 1 set @sqlp=' ) as a where rownumber between ' + convert(varchar(10),@minpage) + ' and '+convert(varchar(10),@maxpage) BEGIN if @intorder = 0 set @order = 'asc' else set @order = 'desc' if @Field_Info like '' set @field_Info = '*' if @Tcount=1 set @sql = 'select * from (select ' + @Field_Info + ' , row_number() over(order by ' + @Field_id + ' ' + @Order + ') as rownumber from ' + @Table_info else set @sql = 'select * from (select ' + @Field_Info + ' , row_number() over(order by ' + @Field_id + ' ' + @Order + ') as rownumber from ' + @Table_info + @OtherTable if @otherwhere like '' set @sql = 'select * from (select ' + @Field_Info + ' , row_number() over(order by ' + @Field_id + ' ' + @Order + ') as rownumber from ' + @Table_info else set @sql = 'select * from (select ' + @Field_Info + ' , row_number() over(order by ' + @Field_id + ' ' + @Order + ') as rownumber from ' + @Table_info + @OtherTable+ @strWhere+ @otherwhere set @sql=@sql+@sqlp --print @sql exec(@sql) END end
分页的三种方案:
建立表:
CREATE TABLE [TestTable] ( [ID] [int] IDENTITY (1, 1) NOT NULL , [FirstName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL , [LastName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL , [Country] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL , [Note] [nvarchar] (2000) COLLATE Chinese_PRC_CI_AS NULL ) ON [PRIMARY] GO
插入数据:(2万条,用更多的数据测试会明显一些)
SET IDENTITY_INSERT TestTable ON declare @i int set @i=1 while @i<=20000 begin insert into TestTable([id], FirstName, LastName, Country,Note) values(@i, ''FirstName_XXX'',''LastName_XXX'',''Country_XXX'',''Note_XXX'') set @i=@i+1 end SET IDENTITY_INSERT TestTable OFF
分页方案一:(利用Not In和SELECT TOP分页)语句形式:
SELECT TOP 10 * FROM TestTable WHERE (ID NOT IN (SELECT TOP 20 id FROM TestTable ORDER BY id)) ORDER BY ID SELECT TOP 页大小 * FROM TestTable WHERE (ID NOT IN (SELECT TOP 页大小*页数 id FROM 表 ORDER BY id)) ORDER BY ID
分页方案二:(利用ID大于多少和SELECT TOP分页)语句形式:
SELECT TOP 10 * FROM TestTable WHERE (ID > (SELECT MAX(id) FROM (SELECT TOP 20 id FROM TestTable ORDER BY id) AS T)) ORDER BY ID SELECT TOP 页大小 * FROM TestTable WHERE (ID > (SELECT MAX(id) FROM (SELECT TOP 页大小*页数 id FROM 表 ORDER BY id) AS T)) ORDER BY ID
分页方案三:(利用SQL的游标存储过程分页)语句形式:
create procedure FenYe @sqlstr nvarchar(4000), --查询字符串 @currentpage int, --第N页 @pagesize int --每页行数 as set nocount on declare @P1 int, --P1是游标的id @rowcount int exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output select ceiling(1.0*@rowcount/@pagesize) as 总页数--,@rowcount as 总行数,@currentpage as 当前页 set @currentpage=(@currentpage-1)*@pagesize+1 exec sp_cursorfetch @P1,16,@currentpage,@pagesize exec sp_cursorclose @P1 set nocount off
其它的方案:如果没有主键,可以用临时表,也可以用方案三做,但是效率会低。
建议优化的时候,加上主键和索引,查询效率会提高。
通过SQL 查询分析器,显示比较:我的结论是:
分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句
分页方案一:(利用Not In和SELECT TOP分页) 效率次之,需要拼接SQL语句
分页方案三:(利用SQL的游标存储过程分页) 效率最差,但是最为通用
发表评论
-
eclipse
2012-01-19 10:19 939eclipse操作常识:eclipse进行项目开发时往往会遇 ... -
sigar使用:在web中应用sigar取得系统信息
2012-01-18 14:19 3247[转] import java.io.IOExce ... -
解决struts1.x表单重复提交问题
2012-01-17 10:40 2336每次填写完表单后单击提交后,struts中action执行相关 ... -
在树初始化时,加一个load图片
2012-01-16 09:45 1817做个浮动图层放在 zTree 上面, 然后利用 asnycS ... -
利用JS做到隐藏div和显示div
2012-01-16 09:05 108718div的visibility可以控制div的显示和隐藏,但是隐 ... -
虚拟机使用NAT不能上网
2012-01-05 08:41 2975虚拟机上网问题 许多虚拟机的初学者,都会询问这样一个问题:在 ... -
[转]用eclipse pdt 配置php开发,调试环境
2011-12-30 16:15 1475本文档是windows操作系统下php开发环境的配置。 1 ... -
RESIN 连接池数据库密码加密方法
2011-12-28 15:34 1594[转] Resin 连接池写在resin.conf里 ... -
好的技术博客
2011-12-28 15:18 842http://www.findjar.com/index.x ... -
利用jawin完成调用window中dll的调用
2011-12-28 15:14 2079[转] Java/Win32互动项目( Jawin)是 ... -
WebService的测试
2011-12-20 09:26 1449在浏览器中输入地址:http://localhost ... -
我的SQLSERVER 分页存储过程
2011-12-13 08:54 3158/** * procedure name : kk_f ... -
Myeclipse中将Web项目发布时重命名
2011-12-12 09:58 1132选中项目->反键->Properties ... -
Sql xtype 类型
2011-11-30 09:39 1218sysobjects 表 在数据库内创建的每个对象(约束、默认 ... -
使用SQL语句清空数据库所有表的数据[转]
2011-11-30 09:14 768近来发现数据库过大,空间不足,因此打算将数据库的数据进行全面的 ... -
js实现焦点进入文本框内关闭输入法
2011-11-30 08:56 3536要用到的东西: imeMode:xxx 有四个参数 act ... -
数据库设计三大范式应用实例剖析[转]
2011-11-29 17:25 767数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数 ... -
Ajax.Request方法
2011-11-29 13:47 1251Prototype 的 Ajax.Request 对象绑定了浏 ... -
临时表(Template Table)[转]
2011-11-25 17:41 15611、MS SQLSERVER SQL ... -
测试sql语句性能
2011-11-25 17:22 1014[size=medium]有时候我们经常为我们的sql语句执行 ...
相关推荐
sqlserver 支持多表联合查询分页存储过程 sqlserver 支持多表联合查询分页存储过程 sqlserver 支持多表联合查询分页存储过程 sqlserver 支持多表联合查询分页存储过程
sql Server 通用分页存储过程 sql Server 通用分页存储过程 sql Server 通用分页存储过程 sql Server 通用分页存储过程
sqlserver+group by分组查询分页存储过程
通用的Sql Server分页程序,并且符合BootStrap Table 的调用标准.
SQLSERVER高效率分页存储过程,数据量在2千万下查询分页只需要1-2秒,优化良好....
sqlserver 分页调用的存储过程 t-sql 语句
想在存储过程中分页的朋友可以使用, sqlserver存储过程万能分页
sql server数据库中分页的存储过程,参数中比较灵活,如果首页传1,非首页传其他。
SqlServer 分页 存储过程
Sql Server BootStrap Table 分页 通用的Sql Server分页程序,并且符合BootStrap Table 的调用标准.
sqlserver写的分页存储过程,在语言java,net中可连接数据库使用
sql server,分页存储,过程,演示 sql server,分页存储,过程,演示 sql server,分页存储,过程,演示 sql server,分页存储,过程,演示 sql server,分页存储,过程,演示 sql server,分页存储,过程,演示 ...
1.查询返回的表、列名以及排序列没有写死,可以根据需要将这些放到存储过程的输入参数中; 2.适用于所有需要分页的单表或多表联合查询。
使用系统游标分页,数据越大越能显示高效
SQL Server 2000下的通用分页存储过程.sql
SQL Server2005通用分页存储过程.rar
物有所值的东东 SQL SERVER 分页存储过程 SQL SERVER 分页存储过程 SQL SERVER 分页存储过程
SQL server2008中通用分页存储过程,表名,每页长度,页码都是动态赋值。
很好的通过存储过程实现分页的技术,很好的通过存储过程实现分页的技术,很好的通过存储过程实现分页的技术