如果您想了解sqlserver2000分页正解的相关知识,那么本文是一篇不可错过的文章,我们将对sqlserver分页进行全面详尽的解释,并且为您提供关于oracle,sqlserver2000分页查
如果您想了解sqlserver2000分页正解的相关知识,那么本文是一篇不可错过的文章,我们将对sql server 分页进行全面详尽的解释,并且为您提供关于oracle,sqlserver 2000分页查询、SQL Server2005与SQLServer2008并存时, 怎样连接到2008、SqlServer2000 与oracle 分页、SQLSERVER2000 存储过程分页的有价值的信息。
本文目录一览:- sqlserver2000分页正解(sql server 分页)
- oracle,sqlserver 2000分页查询
- SQL Server2005与SQLServer2008并存时, 怎样连接到2008
- SqlServer2000 与oracle 分页
- SQLSERVER2000 存储过程分页
sqlserver2000分页正解(sql server 分页)
近段时间基于sqlServer2000进行了一些分页测试,在网上搜到的分页(非存储过程方式)方案中大部分都存在细节的完善,特将正确的细节补充如下:
网上搜到的分页实现如下:
FROM
Users
WHERE
(ID NOT IN (SELECT TOP (页大小*(页数-1)) ID FROM Users ORDER BY ID DESC))
ORDER BY
ID DESC
假定数据库中有42条记录,正确的逐页查询语句如下:
select top 10 id from d where d.id not in(select top 32 id from d order by id desc ) order by id desc --page 1(first page)
select top 10 id from d where d.id not in(select top 22 id from d order by id desc ) order by id desc --page 2
select top 10 id from d where d.id not in(select top 12 id from d order by id desc ) order by id desc -- page 3
select top 10 id from d where d.id not in(select top 2 id from d order by id desc ) order by id desc -- page 4
select top 2 id from d order by id desc -- page 5(last page)
oracle,sqlserver 2000分页查询
欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入 前台Ext,后台ibatis 数据库分页 ORACLE: SELECT * FROM (SELECT A.* ,ROWNUM RN FROM 表名 A WHERE 字段名 LIKE (''%''||#字段名#||''%'') ORDER BY $orderBy$ $orderType$) WHERE RN#start# AND RN=#st
欢迎进入
前台Ext,后台ibatis 数据库分页
ORACLE:
SELECT * FROM (SELECT A.* ,ROWNUM RN FROM 表名 A WHERE 字段名 LIKE (''%''||#字段名#||''%'') ORDER BY $orderBy$ $orderType$) WHERE RN>#start# AND RN
SQLSERVER 2000:
select top $limit$ * FROM 表名 WHERE id not in(SELECT TOP $start$ id FROM 表名 ORDER BY $orderBy$ $orderType$) ORDER BY $orderBy$ $orderType$
SQL Server2005与SQLServer2008并存时, 怎样连接到2008
启动2008, 但是连接中却显示的是sql server 9.0, 这里是因为没有连接好. Server name: 对应的下拉列表中, 拉到最底下, Browse for more, / Local Servers / 数据库引擎 下面就有你本机上所有的实例名.。 选择 计算机名\SQL2008 , 就可以连接到了。 注: 200
启动2008, 但是连接中却显示的是sql server 9.0, 这里是因为没有连接好.
Server name: 对应的下拉列表中, 拉到最底下, "Browse for more", / "Local Servers" / "数据库引擎" 下面就有你本机上所有的实例名.。
选择 计算机名\SQL2008 , 就可以连接到了。
SqlServer2000 与oracle 分页
//oracle
public static String query(String sql,int page,int length){
if( page<=0 ) {
page = 1;
}
int begin = (page-1)*length;
int end = page*length;
String qs =" SELECT * FROM ( SELECT row_.*,ROWNUM rownum_ FROM ( "
+ sql
+ " ) row_ WHERE ROWNUM <= " + end + ") WHERE rownum_ >" +begin;
return qs;
}
/**
* 分页(sqlserver2000) * 例: "SELECT * FROM (SELECT TOP 10 * FROM (SELECT TOP 10 id,name,age "+ " FROM user where 1=1 order by id desc ) TB2 order by id asc) TB3 order by id desc "; * @param sqlFields 搜索字段 * @param tableName 表名 * @param where where条件 * @param orderby 排序(写上desc,asc) * @param page 当前页 * @param length 显示条数 * @return */ public static String queryBysqlServer(String sqlFields,String tableName,String where,String orderby,int length){ if( page<=0 ) { page = 1; } String cutorderby = ""; orderby = orderby.toLowerCase(); if(orderby.contains("desc")){ cutorderby = orderby.replace("desc","asc"); }else{ cutorderby = orderby.replace("asc","desc"); } StringBuffer sb = new StringBuffer(); sb.append("SELECT * FROM (SELECT TOP "); sb.append(length); sb.append(" * FROM (SELECT TOP "); sb.append(page*length).append(" "); sb.append(sqlFields).append(" "); sb.append(" FROM "); sb.append(tableName).append(" "); sb.append(where).append(" "); sb.append(orderby).append(" "); sb.append(" ) TB2 "); sb.append(cutorderby).append(" "); sb.append(" ) TB3 "); sb.append(orderby); return sb.toString(); }SQLSERVER2000 存储过程分页
好久没有用数据库了。最近在做项目时突然发现6年前自己的分页代码有问题的。
这个问题客户居然从来没反馈过。原来是通过主键来分页的,但排序条件加入后其实不能保证主键队列也是排序的,因此 ... WHERE ZID > MAX(...) ... 的做法不对的。
现在改进,使用 NOT IN 的方法。思路是:比如显示第3页,每页10条记录,那么取出30条记录,但是过滤掉前20条,这样排序是解决了,但效率应该降低了。
贴代码:
CREATE PROCEDURE sp_GetPageData
@sSelect NVARCHAR(100),--select 子句
@sFrom NVARCHAR(200), --from 子句
@sWhere NVARCHAR(200), --where 子句
@sOrder NVARCHAR(50), --order by 子句
@iCurPageNo int, --当前页码
@iPageSize int, -- 分页大小
@iRecordCount int out --输出总数据条目数量
AS
DECLARE @iPageCount int --分页数量
DECLARE @sqlString NVARCHAR(800) --总sql
DECLARE @ParmDeFinition NVARCHAR(50) --参数定义
DECLARE @sWhereIn NVARCHAR(200) --NOT IN 子句
IF @iPageSize < 1
SET @iPageSize = 10
--计算记录数目
SET @sqlString = N'SELECT @iRecordCount = COUNT(*) FROM ' + @sFrom + N' WHERE' + @sWhere
--+ ' ORDER BY ' + @sOrder
SET @ParmDeFinition = N'@iRecordCount int OUT'
print @sqlString
EXECUTE sp_executesql @sqlString,@ParmDeFinition,@iRecordCount OUT
print N'@iRecordCount = ' + CAST(@iRecordCount AS varchar)
if (0 = @iRecordCount)
begin
print 'data is null'
return
end
--计算分页
if (@iRecordCount % @iPageSize > 0)
SET @iPageCount = @iRecordCount / @iPageSize + 1
ELSE
SET @iPageCount = @iRecordCount / @iPageSize
--保证请求页在页码范围内
if (@iCurPageNo > @iPageCount)
SET @iCurPageNo = @iPageCount
--返回数据
if (@iCurPageNo > 1)
BEGIN
SET @sWhereIn = N' AND m.ZID NOT IN(SELECT TOP ' + CAST(@iPageSize * (@iCurPageNo - 1) AS VARCHAR) + N' m.ZID FROM ' + @sFrom + N' WHERE' + @sWhere + ' ORDER BY ' + @sOrder + ')'
SET @sqlString = N'SELECT TOP ' + CAST(@iPageSize AS VARCHAR) + @sSelect + N' FROM ' + @sFrom + N' WHERE' + @sWhere + @sWhereIn + ' ORDER BY ' + @sOrder
END
else -- 第一页
SET @sqlString = N'SELECT TOP ' + CAST(@iPageSize AS VARCHAR(8)) + @sSelect + N' FROM ' + @sFrom + N' WHERE' + @sWhere + ' ORDER BY ' + @sOrder
print @sqlString
exec (@sqlString)
select RecordCount = @iRecordCount
go
--测试输入
declare @iRecordCount int
exec sp_GetPageData
N' m.*,g.ZNAME GroupName ',
N'TB_USER m LEFT JOIN TB_GROUP g ON m.ZGROUP_ID = g.ZID ',
N' 1=1',
N' m.ZID DESC',
10,
1,
@iRecordCount out
print 'iRecordCount = ' + CAST(@iRecordCount AS VARCHAR)
今天关于sqlserver2000分页正解和sql server 分页的介绍到此结束,谢谢您的阅读,有关oracle,sqlserver 2000分页查询、SQL Server2005与SQLServer2008并存时, 怎样连接到2008、SqlServer2000 与oracle 分页、SQLSERVER2000 存储过程分页等更多相关知识的信息可以在本站进行查询。
本文标签: