Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment SQL Server génère-t-il des valeurs dans une colonne d'identité ?

Vous faites l'erreur courante de supposer un ordre dans le tableau. Les tables n'ont pas d'ordre. Seuls les résultats ont un ordre, qui est indéterminé à moins qu'un ORDER BY explicite ne soit spécifié.

Vous pouvez poser une question différente :comment la valeur générée par l'identité est-elle affectée en cas d'insertions simultanées ? La réponse est simple :ce n'est pas grave . Et si vous faites une supposition sur la commande, votre code est cassé. Idem pour les lacunes. Votre application devrait fonctionner même si les identités générées sont complètement aléatoires, et une application correctement écrite le fera fonctionner si l'identité est complètement aléatoire. Utilisez SCOPE_IDENTITY() pour récupérer la dernière identité insérée. Mieux encore, utilisez le OUTPUT clause de INSERT , cela fonctionne aussi pour les insertions multi-lignes.

Pour mémoire :les identités sont générées dans l'ordre dans lequel les opérations acquièrent l'accès au flux de journal .