Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie generiert SQL Server Werte in einer Identitätsspalte?

Sie begehen den üblichen Trugschluss, eine Reihenfolge in der Tabelle anzunehmen. Tabellen haben keine Reihenfolge. Nur Ergebnisse haben eine Reihenfolge, die unbestimmt ist, es sei denn, es wird explizit ORDER BY angegeben.

Sie können eine andere Frage stellen:Wie wird der von der Identität generierte Wert im Falle gleichzeitiger Einfügungen zugewiesen? Die Antwort ist einfach:es spielt keine Rolle . Und wenn Sie eine Annahme über die Reihenfolge machen, ist Ihr Code gebrochen. Gleiches gilt für Lücken. Ihre Anwendung sollte auch dann funktionieren, wenn die generierten Identitäten völlig zufällig sind, und eine korrekt geschriebene Anwendung wird funktionieren, wenn die Identität völlig zufällig ist. Verwenden Sie SCOPE_IDENTITY() um die zuletzt eingefügte Identität abzurufen. Besser noch, verwenden Sie OUTPUT Klausel von INSERT , es funktioniert auch für mehrzeilige Einfügungen.

Fürs Protokoll:Die Identitäten werden in der Reihenfolge generiert, in der Operationen Zugriff auf log stream .