+ -
当前位置:首页 → 问答吧 → 请问insert into select 插入数据后顺序与源数据顺序不同

请问insert into select 插入数据后顺序与源数据顺序不同

时间:2011-11-09

来源:互联网

各位大大,现在我有两张表 A(id,code,name) B(id,code,name) 两张表的id列都是不为空的自增列
使用insert into B(code,name) select code,name from A 之后
为什么插入B的数据顺序与A的数据顺序不同呢

作者: rain1989317   发布时间: 2011-11-09

作者: jwdream2008   发布时间: 2011-11-09

SQL code
insert into B(code,name) select code,name from A order by id

作者: ssp2009   发布时间: 2011-11-09

如果想将a的id插入到b中,打开SET IDENTITY_INSERT 选项,
如想指定数据存储的顺序,在插入时指定order by 

作者: jyh070207   发布时间: 2011-11-09

我这儿是一样的 sql server 2008 R2

SQL code
CREATE TABLE #A(id INT IDENTITY(1,1),code INT,NAME VARCHAR(10))
GO

INSERT INTO #A(code,name)
SELECT 123,'A'
UNION ALL
SELECT 456,'B'
UNION ALL
SELECT 789,'C'

CREATE TABLE #B(id INT IDENTITY(1,1),code INT,NAME VARCHAR(10))
GO

insert into #B(code,name) 
select code,name from #A


SELECT * FROM #A
/*
id    code    NAME
1    123    A
2    456    B
3    789    C*/

SELECT * FROM #B
/*
id    code    NAME
1    123    A
2    456    B
3    789    C*/

DROP TABLE #A
DROP TABLE #B

作者: OrchidCat   发布时间: 2011-11-09

DBCC CHECKIDENT (A,RESEED,新的起始值)

DBCC CHECKIDENT (B,RESEED,新的起始值)

作者: zlp321002   发布时间: 2011-11-09

因为存储就是无序的,差的时候直接拷贝也是无序的

作者: Beirut   发布时间: 2011-11-09

select 出来的顺序 不是它内部存储的顺序

作者: Beirut   发布时间: 2011-11-09

存储是按照物理地址排序 查询的时候不加ORDER BY 也是按照物理地址排序

所以要按照顺序排列 需要ORDER BY排序。 这样才是按照逻辑排序。

作者: fredrickhu   发布时间: 2011-11-09

你查询的时候order by一下
他插入的顺序没关系

作者: ningweidong   发布时间: 2011-11-09