sql-server-2005 - SQL Server 2005 : natural sort order for 2-columns tables with unique constraint

标签 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 中删除唯一约束,这就是您所得到的。

当您保留唯一约束并向该表添加第三列(任何类型)时,事情会变得更加神秘,因为 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/

相关文章:

Hibernate自动递增id sql server 2005

sql - 奇怪的 SQL 行为,为什么这个查询什么都不返回?

mysql - 如何获取结果集中每种类型记录的计数

android - 同一类的多个 Realm 表

sql-server - SQLCMD、命令行变量和脚本 :setvar

java - 我们可以在不安装客户端和服务器的情况下从代码连接到SQL Server 2005数据库吗

sql - 在 WHERE 子句中使用 IN 语句时保持排序顺序

sql - 项目和专业项目 : Multiple tables with duplicate columns, 主表和明细表,还是...?

mysql - 由于学生和科目大小不固定,如何在将学生分数插入 tran 表时减少值的冗余?

mysql - 在 MySQL 数据库中存储文章的字段/数据类型