Du laver den almindelige fejlslutning at antage en rækkefølge i tabellen. Bordene har ingen rækkefølge. Kun resultater har rækkefølge, som er ubestemt, medmindre der er angivet en eksplicit ORDER BY.
Du kan stille et andet spørgsmål:hvordan tildeles den identitetsgenererede værdi i tilfælde af samtidige indsættelser? Svaret er enkelt:det er lige meget . Og hvis du gør nogen antagelser om ordren, er din kode ødelagt. Det samme gælder for huller. Din ansøgning burde fungere, selvom de genererede identiteter er fuldstændig tilfældige, og korrekt skrevet ansøgning vil arbejde, hvis identiteten er helt tilfældig. Brug SCOPE_IDENTITY()
for at hente den sidst indsatte identitet. Endnu bedre, brug OUTPUT
klausul af INSERT
, det virker også til indsatser med flere rækker.
For en god ordens skyld:identiteterne genereres i den rækkefølge, som operationer får adgang til logstrøm .