【发布时间】: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