GVKun编程网logo

sqlserver2000分页正解(sql server 分页)

4

如果您想了解sqlserver2000分页正解的相关知识,那么本文是一篇不可错过的文章,我们将对sqlserver分页进行全面详尽的解释,并且为您提供关于oracle,sqlserver2000分页查

如果您想了解sqlserver2000分页正解的相关知识,那么本文是一篇不可错过的文章,我们将对sql server 分页进行全面详尽的解释,并且为您提供关于oracle,sqlserver 2000分页查询、SQL Server2005与SQLServer2008并存时, 怎样连接到2008、SqlServer2000 与oracle 分页、SQLSERVER2000 存储过程分页的有价值的信息。

本文目录一览:

sqlserver2000分页正解(sql server 分页)

sqlserver2000分页正解(sql server 分页)

近段时间基于sqlServer2000进行了一些分页测试,在网上搜到的分页(非存储过程方式)方案中大部分都存在细节的完善,特将正确的细节补充如下:

网上搜到的分页实现如下:

SELECT TOP 页大小 *
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,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

欢迎进入oracle社区论坛,与200万技术人员互动交流 >>进入

  前台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$

oracle,sqlserver 2000分页查询

SQL Server2005与SQLServer2008并存时, 怎样连接到2008

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 , 就可以连接到了。

注: 2008连接之后, 连接中应该显示 SQL Server 10.0

SqlServer2000 与oracle 分页

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 存储过程分页

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 存储过程分页等更多相关知识的信息可以在本站进行查询。

本文标签: