Insert into Select 没有正确插入相同的数据顺序
Posted
技术标签:
【中文标题】Insert into Select 没有正确插入相同的数据顺序【英文标题】:Insert into Select does not insert the same data order correctly 【发布时间】:2015-07-30 10:45:40 【问题描述】:我在 SQL Server 2014 中使用了 insert into 命令,但没有按照数据的相同顺序插入。
它显示的行数相同,但与您在下图中看到的数据顺序不同。
插入命令是:
insert into [test].[dbo].[HöjdKortvågVänster] ([Höjd kortvåg vänster (null)]) select [Höjd kortvåg vänster (null)] from [test].[dbo].[test111]
图 1:源表的选择命令
图 2:目标表的选择命令
我能做些什么来解决这个问题?
【问题讨论】:
您的数据根据您的聚集索引定义进行物理存储和排序。ORDER BY
子句在 INSERT
操作期间被忽略。
谢谢@gotqn。那么,我应该怎么做才能将它作为相同的顺序插入呢?
@gotqn Order By 在插入期间不会被忽略。他只是根本没有使用它。
有人问这个问题:***.com/questions/14424929/… "Preserving ORDER BY in SELECT INTO"
@gotqn - 数据并不总是以聚集索引键顺序物理存储***.com/questions/1251636/…
【参考方案1】:
SQL 结果集是无序的,除非您有order by
。 SQL 表是无序的。
但是,SQL Server 至少提供了一种方法来满足您的需求。如果您在具有identity
列的表中使用order by
并且select
具有order by
,则标识会适当增加。
所以,做你想做的事情的一种方法是在[HöjdKortvågVänster]
中拥有诸如列:
id int not null identity(1, 1) primary key
insert into [test].[dbo].[HöjdKortvågVänster]([Höjd kortvåg vänster (null)])
select [Höjd kortvåg vänster (null)]
from [test].[dbo].[test111]
order by <appropriate column here>;
然后当你查询表时,记住order by
:
select *
from [test].[dbo].[HöjdKortvågVänster]
order by id;
【讨论】:
你认为我需要源表和目标表中的 ID 吗? @YAcaCsh,您将需要ORDER BY
中的INSERT...SELECT...ORDER BY
的一些源列,不一定必须是IDENTITY
。如果您使用第二个ORDER BY
,则目的地将需要IDENTITY
。如果您在源和目标中都有相同的列,那么您可能根本不需要IDENTITY
。
目的地需要一个identity
列。完成插入后,insert
和 select
中都需要一个 order by
。以上是关于Insert into Select 没有正确插入相同的数据顺序的主要内容,如果未能解决你的问题,请参考以下文章
SELECT INTO 和 INSERT INTO SELECT
select into from 和 insert into select的使用
select into 与 insert into select