sql >> Databasteknik >  >> RDS >> Sqlserver

Hur genererar SQL Server värden i en identitetskolumn?

Du gör det vanliga misstaget att anta en ordning i tabellen. Borden har ingen ordning. Endast resultat har ordning, vilket är obestämt om inte en uttrycklig ORDER BY anges.

Du kan ställa en annan fråga:hur tilldelas det identitetsgenererade värdet vid samtidiga insättningar? Svaret är enkelt:det spelar ingen roll . Och om du gör något antagande om beställningen är din kod trasig. Detsamma gäller luckor. Din ansökan bör fungera även om identiteterna som genereras är helt slumpmässiga, och korrekt skriven ansökan kommer fungera om identiteten är helt slumpmässig. Använd SCOPE_IDENTITY() för att hämta den senast infogade identiteten. Ännu bättre, använd OUTPUT sats av INSERT , det fungerar även för skär med flera rader.

För protokollet:identiteterna genereras i den ordning som operationerna får tillgång till loggström .




  1. ORACLE:Materialiserad vy fungerar inte när du använder LEFT JOIN

  2. Välj en rad tillsammans med dess nästa och föregående rad

  3. Ställa in klasssökväg för en lagrad Java-procedur i Oracle

  4. Prestanda/effektivitet för 2 SELECT-satser vs UNION vs något annat i MySQL-PHP