sql >> Database teknologi >  >> RDS >> Sqlserver

Er ordren garanteret, når der indsættes flere rækker med identitet?

Den meget lignende spørgsmål blev spurgt før.

Du kan angive en ORDER BY i INSERT .

Hvis du gør det, den rækkefølge, hvori IDENTITY værdier, der genereres, er garanteret at matche den angivne ORDER BY i INSERT .

Brug dit eksempel:

DECLARE @blah TABLE
(
    ID INT IDENTITY(1, 1) NOT NULL,
    Name VARCHAR(100) NOT NULL
);

INSERT INTO @blah (Name)
SELECT T.Name
FROM
    (
        VALUES
        ('Timmy'),
        ('Jonny'),
        ('Sally')
    ) AS T(Name)
ORDER BY T.Name;

SELECT
    T.ID
    ,T.Name
FROM @blah AS T
ORDER BY T.ID;

Resultatet er:

+----+-------+
| ID | Name  |
+----+-------+
|  1 | Jonny |
|  2 | Sally |
|  3 | Timmy |
+----+-------+

Det vil sige Name er blevet sorteret og id'er er blevet genereret i henhold til denne rækkefølge. Det er garanteret, at Jonny vil have det laveste ID, Timmy vil have det højeste ID, Sally vil have ID mellem dem. Der kan være mellemrum mellem de genererede ID-værdier, men deres relative rækkefølge er garanteret.

Hvis du ikke angiver ORDER BY i INSERT , og derefter resulterende IDENTITY ID'er kan genereres i en anden rækkefølge.

Husk, der er ingen garanti for den faktiske fysiske rækkefølge af rækker i tabellen, selv med ORDER BY i INSERT , den eneste garanti er de genererede ID'er.

I et spørgsmål INSERT INTO som SELECT med BESTIL AF Umachandar Jayachandran fra MS sagde:

Og han gav et link til bestilling garantier i SQL Server , hvor Conor Cunningham fra SQL Server Engine Team siger:

Der er et link til artiklen i MS Knowledge Base i kommentarerne i det indlæg:Opførselen af IDENTITY-funktionen, når den bruges sammen med SELECT INTO eller INSERT .. SELECT-forespørgsler, der indeholder en ORDER BY-klausul , som forklarer det mere detaljeret. Der står:

Jeg vil betragte denne KB-artikel som en officiel dokumentation og betragte denne adfærd som garanteret.



  1. Hvordan man håndterer en ældre database i Django-rammeværket

  2. Undtagelse 'kunne ikke finde driver' under migrering i yii2

  3. Hvornår kører SQLiteOpenHelper onCreate() / onUpgrade()?

  4. Hvordan opretter man en MySQL-database fra dumpfil i expect/TCL-script?