在2008年和2012年执行以下SQL。在2008年执行时,返回的结果是正确的排序顺序。 2012 年,排序顺序不再保留。
这是已知的变化吗? 2012 年是否有保留排序顺序的解决方法?
CREATE TABLE #MyTable(Name VARCHAR(50), SortOrder INT)
INSERT INTO #MyTable SELECT 'b', 2 UNION ALL SELECT 'c', 3 UNION ALL SELECT 'a', 1 UNION ALL SELECT 'e', 5 UNION ALL SELECT 'd', 4
SELECT * INTO #Result FROM #MyTable ORDER BY SortOrder
SELECT * FROM #Result
DROP TABLE #MyTable
DROP TABLE #Result
如何通过使用来判断表内的顺序select * from #result
?不保证订单的顺序select
query.
但是,在 SQL Fiddle 上结果不同。如果要保证结果相同,那就添加主键。然后保证插入顺序:
CREATE TABLE MyTable(Name VARCHAR(50), SortOrder INT)
INSERT INTO MyTable SELECT 'b', 2 UNION ALL SELECT 'c', 3 UNION ALL SELECT 'a', 1 UNION ALL SELECT 'e', 5 UNION ALL SELECT 'd', 4
select top 0 * into result from MyTable;
alter table Result add id int identity(1, 1) primary key;
insert into Result(name, sortorder)
SELECT * FROM MyTable
ORDER BY SortOrder;
我仍然厌恶做select * from Result
在这之后。但是,是的,它确实在 SQL Server 2008 和 2012 中以正确的顺序返回它们。不仅如此,因为 SQL Server 保证主键以正确的顺序插入,所以甚至保证记录以正确的顺序插入。这个案例。
但 。 。 。仅仅因为记录在页面上按特定顺序排列并不意味着它们将按该顺序检索,而无需任何操作。order by
clause.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)