【问题标题】:INSERT INTO SELECT with ORDER BY - can assumptions be made about row insertion orderINSERT INTO SELECT with ORDER BY - 可以假设行插入顺序
【发布时间】:2015-01-14 00:43:52
【问题描述】:

考虑这段代码:

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,汽车

第三行:3,YAB

是否可以安全地假设这种情况总是如此(在本练习中假设您是系统上的唯一用户)。

我试图弄清楚当 SELECT 部分有 ORDER BY 子句时,INSERT 语句是否对它插入行的顺序提供了某种保证。我知道通常这无关紧要,但在涉及 INDENTITY 列时会有所不同。

【问题讨论】:

  • 为什么插入行的顺序很重要?无论如何,SELECT 语句在没有ORDER BY 的情况下永远不会有保证的订单。
  • @MikeD。因为他可以按id排序,代表插入顺序。
  • @MikeD - 我很欣赏没有 ORDER BY 的 SELECT 永远不会有保证的订单。我在这里谈论的是稍微不同的东西。
  • 您可能会发现here 的解释很有帮助。

标签: tsql sql-server-2012


【解决方案1】:

是的,手动插入语句将按顺序处理,稍后插入将具有更大的标识值。

如果插入是从另一个表中选择的,那么您需要订购选择。
插入将遵循选择的顺序。
在这种情况下,如果活动出现平局,您的选择可能会有所不同。

【讨论】:

  • 谢谢。是的,在我的情况下,如果绑定的“活动”值有一些不确定的排序,那没关系。
猜你喜欢
  • 2017-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多