关于sqlserver中的表嵌套查询数据错乱的问题


碰到个问题,在sqlserver里对取得的数据分页,使用下面的sql:



select top 5000 * from
  (
          select top 5000 * from (
                  select top 200000 row_number() OVER (order by auto_id asc) n,t.*
                  from Hdp_User_Goshop_Log t with(nolock,INDEX = idx_hdp_user_goshop_log_acttime)
                  where t.acttime > '2014-11-12 09:00' and t.acttime < '2014-11-12 10:00'
          ) t1 


order by t1.n desc


  ) t2 order by t2.n sac


发现出现的数据并不是想象中的195000到200000,而是380000,最后的解决方式是:



select top 5000 * from
  (
          select top 5000 * from (
                  select top 200000 row_number() OVER (order by auto_id asc) n,INDEX = idx_hdp_user_goshop_log_acttime)
                  where t.acttime > '2014-11-12 09:00' and t.acttime < '2014-11-12 10:00'order by n asc
          ) t1 


order by t1.n desc


  ) t2 order by t2.n sac



具体原因可能是因为sqlserver中的top的排序问题,sqlserver中如果你没有指定默认排序,很容易出现问题,得到的数据可能不是你预期的合理的数据。

相关文章

本篇内容主要讲解“sqlalchemy的常用数据类型怎么使用”,感...
今天小编给大家分享一下sqlServer实现分页查询的方式有哪些的...
这篇文章主要介绍“sqlmap之osshell怎么使用”,在日常操作中...
本篇内容介绍了“SQL注入的知识点有哪些”的有关知识,在实际...
1. mssql权限sa权限:数据库操作,文件管理,命令执行,注册...
sql执行计划如何查看?在SPL庞大的数据中我们不知道如何查看...