Difference in order by clause behaviour in SQL Server 2008 vs 2014 -
i using temp table variable in stored procedure , doing insertion temp table temp table order clause. working in sql server 2008. order by clause working while inserting table.
but have upgraded database sql server 2014 , order by clause behavior has changed. no longer inserts data in ordered manner.
eg :
declare @table1 table(id int, datecolumn datetime) declare @table2 table(id int, datecolumn datetime) declare @table3 table(id int, datecolumn datetime) insert @table1 values(1, getdate()); insert @table1 values(1, dateadd(hour, 1, getdate())); insert @table1 values(1, dateadd(hour, 2, getdate())); insert @table2 values(2, getdate()); insert @table2 values(2, dateadd(minute, 55, getdate())); insert @table2 values(2, dateadd(minute, 130, getdate())); insert @table3 select * (select * @table1 union select * @table2) t order datecolumn select * @table3 and output correct in sql server 2008 is
id datecolumn --------------------------- 1 2015-03-31 21:27:48.290 2 2015-03-31 21:27:48.290 2 2015-03-31 22:22:48.290 1 2015-03-31 22:27:48.290 1 2015-03-31 23:27:48.290 2 2015-03-31 23:37:48.290 but in sql server 2014, showing incorrect
id datecolumn ---------------------------- 1 2015-03-31 10:57:22.920 1 2015-03-31 11:57:22.920 1 2015-03-31 12:57:22.920 2 2015-03-31 10:57:22.920 2 2015-03-31 11:52:22.920 2 2015-03-31 13:07:22.920 how make work in sql server 2014 ?
you have have order clause in select. sql server not guarantee order of rows stays same in insert. either original time column or add identity field.
Comments
Post a Comment