您的位置:首页 > 数据库

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

2014-11-13 20:36 246 查看
碰到个问题,在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, 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'order by n asc

          ) t1 

order by t1.n desc

  ) t2 order by t2.n sac

具体原因可能是因为sqlserver中的top的排序问题,sqlserver中如果你没有指定默认排序,很容易出现问题,得到的数据可能不是你预期的合理的数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: