SQL Server 2005: естественный порядок сортировки для таблиц с двумя столбцами с уникальным ограничением - PullRequest
2 голосов
/ 18 декабря 2008

У меня есть эта таблица в моей базе данных 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) я получаю набор результатов, упорядоченный в соответствии со 2-м столбцом (Col2)

Я бы ожидал, что он (естественно) будет упорядочен по столбцу PK (который фактически является порядком вставки записей) Фактически, если вы удалите уникальное ограничение из Col2, это то, что вы получите.

И все становится еще более загадочным, когда вы сохраняете ограничение уникальности и добавляете в эту таблицу 3-й столбец (любого типа), поскольку затем результат SELECT * сортируется в соответствии с естественным порядком.

Есть идеи, почему такое поведение? И как от этого избавиться. Спасибо

1 Ответ

3 голосов
/ 18 декабря 2008

SELECT является операцией, ориентированной на наборы, и, поскольку наборы неупорядочены, никакой определенный порядок в наборе результатов не гарантируется, если вы явно не используете ORDER BY.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...