- 浏览: 602711 次
- 性别:
- 来自: 卡哇伊
文章分类
- 全部博客 (299)
- C# (25)
- Java (1)
- WinForm (0)
- Asp.Net (86)
- Jsp (2)
- Php (1)
- Web Service (0)
- Desgin Patterns (19)
- Data Structure & Algorithms (1)
- SQLserver (41)
- Mysql (0)
- Oracle (2)
- Javascript (50)
- Ajax (10)
- Jquery (1)
- Flex (0)
- Regular Expression (5)
- DIV+CSS+XHTML+XML (18)
- Software Test (0)
- Linux (0)
- Utility (17)
- Net Digest (4)
- windows 2003 (10)
- Other (4)
- English (1)
- IT Term (1)
最新评论
-
w497480098h:
学习了 很好谢谢
SQL Server下无限多级别分类查询解决办法(简单查询树形结构数据库表) -
main_fun:
确实不错
iframe自适应高度 -
jveqi:
...
DBA -
mxcie:
其它版本没有确认,今天使用vs2003时,其.sln文件也需要 ...
彻底删除项目的VSS源代码管理信息 -
moneyprosper:
就只有IE支持,火狐和谷歌都不支持此种方法。正在寻找中。。。
从父页面读取和操作iframe中内容方法
存储过程:
CREATE PROCEDURE PrcTest -- 获得某一页的数据 -- @currPage int = 1, --当前页页码 (即Top currPage) @showColumn varchar(2000) = '*', --需要得到的字段 (即 column1,column2,......) @tabName varchar(2000), --需要查看的表名 (即 from table_name) @strCondition varchar(2000) = '', --查询条件 (即 where condition......) 不用加where关键字 @ascColumn varchar(100) = '', --排序的字段名 (即 order by column asc/desc) @bitOrderType bit = 0, ---排序的类型 (0为升序,1为降序) @pkColumn varchar(50) = '', --主键名称 @pageSize int = 20 --分页大小 AS BEGIN -- 存储过程开始 -- 该存储过程需要用到的几个变量 DECLARE @strTemp varchar(1000) DECLARE @strSql varchar(4000) --该存储过程最后执行的语句 DECLARE @strOrderType varchar(1000) --排序类型语句 (order by column asc或者order by column desc) BEGIN IF @bitOrderType = 1 -- bitOrderType=1即执行降序 BEGIN SET @strOrderType = ' ORDER BY '+@ascColumn+' DESC' SET @strTemp = '<(SELECT min' END ELSE BEGIN SET @strOrderType = ' ORDER BY '+@ascColumn+' ASC' SET @strTemp = '>(SELECT max' END IF @currPage = 1 -- 如果是第一页 BEGIN IF @strCondition != '' SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM '+@tabName+ ' WHERE '+@strCondition+@strOrderType ELSE SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM '+@tabName+@strOrderType END ELSE -- 其他页 BEGIN IF @strCondition !='' SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM '+@tabName+ ' WHERE '+@strCondition+' AND '+@pkColumn+@strTemp+'('+@pkColumn+')'+' FROM (SELECT TOP '+STR((@currPage-1)*@pageSize)+ ' '+@pkColumn+' FROM '+@tabName+@strOrderType+') AS TabTemp)'+@strOrderType ELSE SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM '+@tabName+ ' WHERE '+@pkColumn+@strTemp+'('+@pkColumn+')'+' FROM (SELECT TOP '+STR((@currPage-1)*@pageSize)+' '+@pkColumn+ ' FROM '+@tabName+@strOrderType+') AS TabTemp)'+@strOrderType END END EXEC (@strSql) END -- 存储过程结束 --prcPageResult 1,'*','TableName','','CreateDate',1,'PkID',25 /* 下面的存储过程查询表的记录数 CREATE PROC prcRowsCount @tabName varchar(200), --需要查询的表名 @colName varchar(200)='*', --需要查询的列名 @condition varchar(200)='' --查询条件 AS BEGIN DECLARE @strSql varchar(255) IF @condition = '' SET @strSql='select count('+@colName+') from '+@tabName ELSE SET @strSql='select count('+@colName+') from '+@tabName+' where '+@condition EXEC (@strSql) END */ GO
建立表:
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 XiaoZhengGe
@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的游标存储过程分页) 效率最差,但是最为通用
发表评论
-
给定一个日期,确认是本月的第几周
2010-06-02 17:10 1124select * from workplan where ... -
SQL Server 2005 中的架构与用户
2009-10-29 13:33 1495从 SQL Server 2005 开始,每个对象都属于 ... -
查询时间段数据问题
2009-10-25 23:01 1332问题: select * from dbo.Tab_Arti ... -
sql 查询当天,本月,本周的记录
2009-10-25 22:00 5432--查询当天: select * from info ... -
MSSql基本语句
2009-10-22 22:23 1134下列语句部分是Mssql语句,不可以在access中使用(这是 ... -
SQL 连接 JOIN 例解。(左连接,右连接,全连接,内连接,交叉连接,自连接)
2009-10-12 14:30 1639最近公司在招人,同事问了几个自认为数据库可以的应聘者关于库连接 ... -
有重复数据时只显示一条记录
2009-10-12 10:26 1390if not object_id('tempdb..#T') ... -
sql中CASE两种用法
2009-10-09 19:14 873方法一: select (case TitleOfCo ... -
根据路线分类查找该分类下热门(点击量高的)路线信息的两种方式
2009-09-02 17:49 771--根据路线分类查找该分类下热门(点击量高的)路线信 ... -
NVARCHAR 和VARCHAR区别和使用
2009-08-21 20:37 22231、各自的定义: ... -
SQL Order By
2009-08-19 17:40 1924到目前为止,我们已学到如何藉由 SELECT 及 WHERE这 ... -
异常:此数据库没有有效所有者,因此无法安装数据库关系图支持对象。 (SQL2000转到2005)
2009-08-17 19:50 2940某一天,在调试程序时 ... -
Sql Server 常用日期格式
2009-08-15 21:16 938进来因为开发原因,经常需要使用日期方面的比较和操作,整理了一下 ... -
SQL优化34条
2009-08-12 12:10 707我们要做到不但会写SQL,还要做到写出性能优良的SQL,以下为 ... -
论坛或相册上一条、下一条查询方式
2009-08-04 10:26 922--上一条 select top 1 * from tabl ... -
SQL分组查询做相关统计
2009-08-01 11:26 1594根据项目名称分组得到相关数据统计 select row ... -
查询置顶,热门,推荐,最新的20条记录
2009-07-31 08:37 934表结构: --查询置顶:news_IsTop,热门 ... -
SQL Server下无限多级别分类查询解决办法(简单查询树形结构数据库表)
2009-07-30 23:56 3060在开发中经常会遇到无限级分类的问题,最常见的是一些无限级目录之 ... -
一条语句简单解决“每个Y的最新X”的SQL经典问题
2009-07-30 23:51 976“每个Y的最新X”是一个经典的SQL问题,工作中经常碰到。当然 ... -
数据库优化
2009-07-30 18:27 6971.对查询进行优化,应尽量避免全表扫描,首先应考虑在 wher ...
相关推荐
关于SQL Server SQL语句查询分页数据的解决方案
sqlserver分页查询语句;sqlserver分页查询语句;sqlserver分页查询语句;
SqlServer数据库中的分页语句,SqlServer分页SQL语句特点:一次查询,数据库只返回一页的数据。而不是取出所有的数据。
SQL server2008中通用分页存储过程,表名,每页长度,页码都是动态赋值。
sql server2005 分页查询语句
SQL Server 存储过程及Oracle SQL语句分页
用SQL语句实现分页(Oracle版Sql Server版)
3大数据库(Sql-Server,MySql和Oracle)的分页SQL语句实现
几条常见的数据库分页SQL 语句,针对oracle,sqlserver,mysql三种常见数据库的分页显示。
简易的sqlserver分页功能,只需要将页码传入即可...3、传入mybitis中 在sql语句头部调用 ${pading.begin} 结尾调用 ${pading.end}即可实现分页 4、默认每页10条 若需要更改 则修改该类源码中 的成员变量即可(有注释)
使用SQL语句实现通用分页查询,支持模糊查询等。
用标准的SQL语句实现查询记录分页.txt
sql server 分页大全, 分页存储过程,分页TSQL , 分页语法,语句! 最全的SQL Server2000 分页方法。 可放心下载
LINQ To SQL实现分页效果源码 VS2008 Frameworks3.5 LINQ To SQL 实现分页效果 数据库SQL 2005
分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句 分页方案一:(利用Not In和SELECT TOP分页) 效率次之,需要拼接SQL语句 分页方案三:(利用SQL的游标存储过程分页) 效率最差,但是最为...
通用的存储过程sql分页查询语句,节约您的时间....
NULL 博文链接:https://baobeituping.iteye.com/blog/2159496
c#\book\实现分页的sql语句
SQL分页语句 有关分页 SQL 的资料很多,有的使用存储过程,有的使用游标。本人不喜欢使用游标,我觉得它耗资、效率低;使用存储过程是个不错的选择,因为存储过程是经过预编译的,执行效率高,也更灵活。先看看单条 ...