SQL Server 2005:具有唯一约束的2列表的自然排序顺序

时间:2008-12-18 09:30:29

标签: sql-server-2005 database-design

我在SQL Express 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中删除唯一约束,那就是你得到的。

当您保留唯一约束并向该表添加第3列(任何类型)时,事情变得更加神秘,因为SELECT *的结果随后会根据自然顺序排序。

知道为什么会出现这样的行为?以及如何摆脱它。 感谢

1 个答案:

答案 0 :(得分:3)

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