Sql server sql server是否注意记录插入位置的方式?

Sql server sql server是否注意记录插入位置的方式?,sql-server,sql-server-2008-r2,sql-order-by,Sql Server,Sql Server 2008 R2,Sql Order By,(a“如何运作”-问题) 假设我有这张桌子: Id val ------------------ 1 a <-- 1 a 1 a 2 b <-- 2 b 2 b 要给我选定的行吗 (注意orderby子句)。是否将订单视为插入的顺序?

(a“如何运作”-问题)

假设我有这张桌子:

   Id            val
    ------------------
    1             a       <--
    1             a
    1             a
    2             b       <--
    2             b
    2             b
要给我选定的行吗


(注意
orderby
子句)。是否将订单视为插入的顺序?

< P>行为不能保证。查询将返回两行,但哪些行未定义

当我尝试

create table #t (id int, val char(1), t timestamp)
insert #t  (id, val) values (1,'a')
insert #t  (id, val) values (1,'a')
insert #t  (id, val) values (2,'b')

insert #t  (id, val) values (1,'a')
insert #t  (id, val) values (2,'b')
insert #t  (id, val) values (2,'b')
select * from #t 

select * from ( 
select *, row_number() over (partition by id order by id) as rn from #t  
) k where rn=1 


drop table #t

结果是可变的,取决于插入的顺序,但并不一致于第一个插入的行。

无法保证行为。查询将返回两行,但哪些行未定义

当我尝试

create table #t (id int, val char(1), t timestamp)
insert #t  (id, val) values (1,'a')
insert #t  (id, val) values (1,'a')
insert #t  (id, val) values (2,'b')

insert #t  (id, val) values (1,'a')
insert #t  (id, val) values (2,'b')
insert #t  (id, val) values (2,'b')
select * from #t 

select * from ( 
select *, row_number() over (partition by id order by id) as rn from #t  
) k where rn=1 


drop table #t

结果是可变的,取决于插入的顺序,但不一致于第一个插入的行。

否,行的顺序只能由
order by
子句确定-如果您的
order by
子句在两行之间不确定,则返回它们的顺序是任意的。为了能够做到这一点,您需要添加一些东西来对它们进行uniquify。然而,作为一般规则,大多数表都应该有一个唯一的或主键,这样就可以为您提供一些可以根据其进行订购的内容


各种因素都会影响它,例如Enterprise edition中的旋转木马扫描、对聚集索引重新编制索引等。

否,行的顺序只能由
order by
子句确定-如果
order by
子句在两行之间不确定,则返回它们的顺序是任意的。为了能够做到这一点,您需要添加一些东西来对它们进行uniquify。然而,作为一般规则,大多数表都应该有一个唯一的或主键,这样就可以为您提供一些可以根据其进行订购的内容


各种因素都会影响它,例如企业版中的旋转木马扫描、对聚集索引重新编制索引等。

这个问题确实来自于@hims056吗。我也回答了。但索莫内斯的评论引起了我的注意。这个问题在你的脑海中出现了吗?@hims056。我也回答了。但索莫内斯的评论引起了我的注意。