2017-04-04 2 views
1

Ich versuche Wörterbuch Tabelle zu erstellen, die nur zwei Spalten PK Id und eindeutigen Namen hat:Erstellen Tabelle mit eindeutigen Spalte sortieren ändert bestellen

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) 
) 

Einfügen von Werten:

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

Nach tun:

SELECT * 
FROM [SnApp].[DictionaryErrorType] 

I got output sorted by Name not by primary key

Warum?

Wie kann ich nur diese zwei Spalten haben, aber nach ID nicht nach Name sortiert?

+0

Jede Bestellung, die Sie in einer Auswahl sehen, die kein 'ORDER BY' hat, ist eine Illusion, die von einem Schmetterling gebrochen werden kann flattert mit den Flügeln. – xanatos

+1

Wenn Sie ** eine 'ORDER BY' Klausel nicht explizit angeben - *** gibt es keine Bestellung! *** - Wenn Sie eine Bestellung benötigen, dann verwenden Sie' ORDER BY' ..... –

Antwort

3

Daten in einer SQL Server-Tabelle sind nicht inhärent geordnet. Es existiert einfach.

die richtige Reihenfolge zu erhalten, verwenden ORDER BY

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

I Ich weiß, dass ich Order by Clause verwenden kann. Das ist hier kein Problem. Ich versuche Daten ohne diese Klausel zu bestellen. Wenn ich nicht Unique in Name Spalte hinzufügen würde Daten nach ID sortiert werden – AdamN

+0

Wie ich schon sagte, die Zeilen werden nicht in der Reihenfolge gespeichert. Es ** muss ** in der Abfrage definiert sein. – JohnHC

+0

Wenn Abfrage jedoch die Sortierreihenfolge nicht definiert, gibt SQL Daten nach ID oder in diesem Fall Spalte Name zurück. Warum ? Gibt es keine Flagge, die dies definiert? – AdamN

1

Sie benötigen, um ausdrücklich zu erwähnen, durch Klausel

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

Wenn Sie aufsteigend Index standardmäßig manchmal gruppierten haben kehrt sie in sortierter Reihenfolge, aber sie kann keine sortierten Ergebnisse dort garantieren

Verwandte Themen