我在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 *的结果随后会根据自然顺序排序。
知道为什么会出现这样的行为?以及如何摆脱它。 感谢
答案 0 :(得分:3)
SELECT是一个面向集合的操作,并且由于集合是无序的,因此除非您明确使用ORDER BY,否则不保证结果集中的特定顺序。