2017-04-04 65 views
1

我试图创造出只有两列PK Id和唯一的名字字典表:创建表,唯一的列更改排序顺序

CREATE TABLE [SnApp].[DictionaryErrorType] 
(
    [Id] [int] IDENTITY(1,1) NOT NULL, 
    [Name] [varchar](30) NOT NULL, 

    CONSTRAINT UC_Name UNIQUE ([Name]), 

    CONSTRAINT [PK_ID_DictionaryErrorType] 
     PRIMARY KEY CLUSTERED ([Id] ASC) 
) 

插入值:

INSERT INTO [SnApp].[DictionaryErrorType] (Name) 
VALUES ('Info'), ('Warning'), ('Error') 

后做:

SELECT * 
FROM [SnApp].[DictionaryErrorType] 

I got output sorted by Name not by primary key

为什么?

我怎样才能只有这两列,但没有按名称排序ID?

+0

任何订购你看到一个选择,没有一个'ORDER BY'是一个幻想,可以打破蝴蝶拍动着它的翅膀。 – xanatos

+1

如果您**没有明确指定** ORDER BY'条款 - ***没有订购!*** - 如果您需要订单,请使用'ORDER BY' ..... –

回答

3

sql服务器表中的数据不是固有排序的。它只是存在。

为了得到正确的次序,使用ORDER BY

select * 
from [SnApp].[DictionaryErrorType] 
order by ID 
+0

I知道我可以使用Order by子句。这不是一个问题。我试图在没有这条款的情况下订购数据。 如果我不会添加唯一的名称列,那么数据将按照ID – AdamN

+0

排序。就像我说的那样,行不是按顺序存储的。它必须**在查询中定义。 – JohnHC

+0

但是,如果查询未定义排序顺序,则SQL将返回按ID排序的数据,或者在此情况下为Name列。为什么?没有任何标志定义这个? – AdamN

1

你需要通过条款

SELECT * 
FROM [SnApp].[DictionaryErrorType] 
    ORDER BY Id 

明确提到为了如果您在默认情况下,有时聚集升序索引它返回排序,但你不能保证有排序的结果