2008-12-18 75 views
2

我有这个表在我的SQL Express 2005数据库:的SQL Server 2005:自然排序顺序与唯一约束两列的表

CREATE TABLE [dbo].[test_sort_order](
    [Col1] [int] IDENTITY(1,1) NOT NULL, 
    [Col2] [nchar](50) COLLATE French_CI_AS NULL, 
CONSTRAINT [PK_test_sort_order] PRIMARY KEY CLUSTERED 
(
    [Col1] ASC 
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY], 
CONSTRAINT [UQ_test_sort_order] UNIQUE NONCLUSTERED 
(
    [Col2] ASC 
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY] 
) ON [PRIMARY] 

当运行反对平坦的SQL查询(通常SELECT * FROM test_sort_order)我得到根据第二列(Col2)排序的结果集

我期望它能够(自然地)对PK列进行排序(事实上这是记录插入的顺序) 实际上,如果你从Col2中删除了唯一的约束,这就是你得到的。

当你保持唯一约束并且向该表添加第三列(任何类型)时,事情变得更加神秘,因为SELECT *的结果然后按照自然顺序排序。

任何想法为什么这样的行为?以及如何摆脱它。 谢谢

回答

3

SELECT是一个面向集合的操作,并且由于集合是无序的,除非明确使用ORDER BY,否则结果集中没有特定的顺序。