INSERT INTO SELECT with ORDER BY - 可以对行插入顺序进行假设
INSERT INTO SELECT with ORDER BY - can assumptions be made about row insertion order
考虑这段代码:
CREATE TABLE dbo.t2 (code varchar(100) not null primary key, nam varchar(100) not null, active DATETIME)
insert into dbo.t2 (code, nam, active) values ('YAB', 'Yabbie', '20140101')
insert into dbo.t2 (code, nam, active) values ('CAR', 'Carp', '20130101')
insert into dbo.t2 (code, nam, active) values ('ANG', 'Angel Fish', '20110101')
CREATE TABLE dbo.t1 (id INT IDENTITY PRIMARY KEY, code varchar(100) not null)
insert into dbo.t1 (code) select code from dbo.t2 order by active
select * from dbo.t1 order by id
我从 select 语句中看到的结果是:
第一行:1,ANG
第二行:2,CAR
第三行:3,YAB
假设情况总是如此是否安全(在本练习中假设您是系统上的唯一用户)。
我试图弄清楚当 SELECT 部分有一个 ORDER BY 子句时,INSERT 语句是否提供了关于它插入行的顺序的某种保证。我知道通常这应该无关紧要,但是当涉及 INDENTITY 列时它会有所不同。
是的,手动插入语句将按顺序处理,稍后的插入将具有更大的标识值。
如果插入的是另一个 table 的 select,那么您需要订购 select。
插入将遵循 select.
的顺序
在这种情况下,如果在 active 上有平局,你的 select 可能会有变化。
考虑这段代码:
CREATE TABLE dbo.t2 (code varchar(100) not null primary key, nam varchar(100) not null, active DATETIME)
insert into dbo.t2 (code, nam, active) values ('YAB', 'Yabbie', '20140101')
insert into dbo.t2 (code, nam, active) values ('CAR', 'Carp', '20130101')
insert into dbo.t2 (code, nam, active) values ('ANG', 'Angel Fish', '20110101')
CREATE TABLE dbo.t1 (id INT IDENTITY PRIMARY KEY, code varchar(100) not null)
insert into dbo.t1 (code) select code from dbo.t2 order by active
select * from dbo.t1 order by id
我从 select 语句中看到的结果是:
第一行:1,ANG
第二行:2,CAR
第三行:3,YAB
假设情况总是如此是否安全(在本练习中假设您是系统上的唯一用户)。
我试图弄清楚当 SELECT 部分有一个 ORDER BY 子句时,INSERT 语句是否提供了关于它插入行的顺序的某种保证。我知道通常这应该无关紧要,但是当涉及 INDENTITY 列时它会有所不同。
是的,手动插入语句将按顺序处理,稍后的插入将具有更大的标识值。
如果插入的是另一个 table 的 select,那么您需要订购 select。
插入将遵循 select.
的顺序
在这种情况下,如果在 active 上有平局,你的 select 可能会有变化。