本文转载自微信公众号《DBA的杂念录》,作者潇湘隐士。转载本文请联系DBA杂念公众号。在SQLServer2005/2008中,如果向临时表中插入有序记录,从临时表中查询到的记录是有序的(不依赖ORDERBY也是有序的),但是从SQLSERVER2012开始,即使插入记录集是有序的,查询结果变成无序的。需要依赖ORDERBY来或得到一个有序的结果。例如下面的例子:SELECT*INTO#tablesFROMsys.tablesORDERBYname;SELECT*FROM#tables;如上所示,SQLSERVER2014处于无序状态。对我们来说,它就像一个黑匣子。我们只知道结果集发生了变化,却不知道是什么内部变化导致了这种现象。使用ORDERBY子句向TempTable插入数据时,表中的记录没有排序官方论坛对这个问题的描述如下:官方的回答不是很清楚,但毫无疑问,临时表的内部存储或实现必须不同的是,由于更改,临时表中的数据不再默认排序,但SQLServer不是开源数据库。如果官方文档不公开这些细节,很多事情就不知道真正的根源!如果有特殊需要,请求临时表,如果数据是有序的,可以通过创建聚簇索引来解决这个问题。如下:SELECT*INTO#tablesFROMsys.tablesWHERE1=0;CREATECLUSTEREDINDEXIDX_#tables_NAMEON#tables(name);INSERTINTO#tablesSELECT*FROMsys.tablesORDERBYname;SELECT*FROM#tables;
