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

关于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
关于sqlserver中的表嵌套查询数据错乱的问题

发现出现的数据并不是想象中的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中如果你没有指定默认排序,很容易出现问题,得到的数据可能不是你预期的合理的数据。

0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论