Δεν διαφωνώ ως προς το SCOPE_IDENTITY αλλά μάλλον δεν με κατάλαβες... Κοίτα αυτό το σενάριο/παράδειγμα:
1. Ο xρήστης Α ξεκινάει το transaction του.
2. Ο xρήστης Β ξεκινάει το transaction του.
3. O xρήστης Α κάνει Insert στον πίνακα και του επιστρέφεται identity = 10.
4. Ο χρήστης Β κάνει κι αυτός Insert και του επιστρέφεται identity = 11.
5. O xρήστης Α κάνει Insert στον πίνακα χρησιμοποιώντας το identity = 10 που είχε διαβάσει.
6. O xρήστης Β κάνει Insert στον πίνακα χρησιμοποιώντας το identity = 11 που είχε διαβάσει.
7. Ο χρήστης Α κάνει commit.
8. Ο χρήστης B κάνει commit.
Το SCOPE_IDENTITY δουλεύει σωστά, την στιγμή που το διαβάζει ο χρήστης Α (βήμα 3) του επιστρέφει σωστή τιμή αλλά το θέμα είναι ότι μέχρι ο χρήστης Α να φτάσει στο βήμα 5, ένας άλλος χρήστης έκανε το βήμα 4 και πλέον το ID που έχει ο χρήστης Α δεν είναι πραγματικά το τελευταίο που είχε χρησιμοποιηθεί. Το πρόβλημα προκύπτει από την χρονική στιγμή που διαβάζει ο χρήστης Α το identity.
Είναι άλλο πράγμα να το χρησιμοποιήσεις το identity αφού έχεις κάνει ένα insert απλά για να ενημερώσεις το UI και άλλο πράγμα να έχεις ένα transaction όπου θα το επαναχρησιμοποιήσεις παρακάτω έχοντας την εντύπωση ότι είναι το τελευταίο identity που έχει χρησιμοποιηθεί. Εκτός αν μιλάμε για single-user εφαρμογή οπότε δεν υπάρχει τέτοιο concurency πρόβλημα.
Πάντως, αυτός είναι ένας χαρακτηριστικός λόγος για τον οποίο δεν πρέπει να χρησιμοποιεί κανείς τα identities αλλά τα surrogate keys για τέτοιες δουλειές.
Vir prudens non contra ventum mingit