我的 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 中删除唯一约束,这就是您所得到的。
当您保留唯一约束并向该表添加第三列(任何类型)时,事情会变得更加神秘,因为 SELECT * 的结果是根据自然顺序排序的。
知道为什么会有这样的行为吗?以及如何摆脱它。 谢谢
最佳答案
SELECT 是面向集合的操作,并且由于集合是无序的,因此不能保证结果集中的特定顺序,除非您显式使用 ORDER BY。
关于sql-server-2005 - SQL Server 2005 : natural sort order for 2-columns tables with unique constraint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/377332/