我认为答案是否定的。 而要寻找一个反例表明,输出的顺序是没有保证的,by子句缺少的顺序。
考虑:
create table #order (orderId int primary key clustered
, customerId int not null -- references customer(customerId)
, orderDateTIme datetime not null)
insert into #order values (1, 100, '2009-01-01')
insert into #order values (2, 101, '2009-01-02')
insert into #order values (3, 102, '2009-01-03')
insert into #order values (4, 103, '2009-01-04')
insert into #order values (5, 100, '2009-01-05')
insert into #order values (6, 101, '2009-01-06')
insert into #order values (7, 101, '2009-01-07')
insert into #order values (8, 103, '2009-01-08')
insert into #order values (9, 105, '2009-01-09')
insert into #order values (10, 100, '2009-01-10')
insert into #order values (11, 101, '2009-01-11')
insert into #order values (12, 102, '2009-01-12')
insert into #order values (13, 103, '2009-01-13')
insert into #order values (14, 100, '2009-01-14')
insert into #order values (15, 100, '2009-01-15')
insert into #order values (16, 101, '2009-01-16')
insert into #order values (17, 102, '2009-01-17')
insert into #order values (18, 101, '2009-01-18')
insert into #order values (19, 100, '2009-01-19')
insert into #order values (20, 101, '2009-01-20')
select * from #order
-- Results in PK order due to clustered primary key
select orderId, CustomerId, orderDateTime
, row_number() over (partition by customerId order by orderDateTime) RN
from #order
在MS SQL Server 2005中,输出顺序有两个属性:
对于每一行
customerId
是输出连续的。Row_number()
是每个客户ID内顺序进行的。
我的理解是,这两个属性,不保证by子句没有一个明确的顺序。 我想找一份上述属性并不认为不被强迫命令的条款,但仅仅是MS SQL Server如何发生的工作结果的一个例子。 随意,如果需要开发自己的表定义,索引等在你的榜样。
或者,如果我错了,这将表明,这些排序保证,即使没有条款明确顺序的参考的链接。