2017-04-04 67 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 

明確提到爲了如果您在默認情況下,有時聚集升序索引它返回排序,但你不能保證有排序的結果