Πηγή: Διαδίκτυο Συγγραφέας: Άγνωστος
- Δημιουργήστε βάσεις δεδομένων και πίνακες
δημιουργία βάσης δεδομένων MyDataBase
χρησιμοποιήστε το MyDataBase
δημιουργία πίνακα mytable
id int ταυτότητα(1,1),
Όνομα varchar(20)
)
--Εκτελέστε αυτήν την SQL για να μάθετε την τιμή της αυτοαυξητικής στήλης που αντιστοιχεί στην εγγραφή που μόλις εισήχθη
εισαγωγή στις τιμές mytable('Li Si')
Επιλέξτε @@identity
2. Σύγκριση των τριών μεθόδων
Στον SQL Server 2000, υπάρχουν τρεις παρόμοιες δυνατότητες: SCOPE_IDENTITY, IDENT_CURRENT και @@IDENTITY, οι οποίες επιστρέφουν τιμές που έχουν εισαχθεί στη στήλη IDENTITY.
IDENT_CURRENT Επιστρέφει την τελευταία τιμή αναγνώρισης που δημιουργήθηκε για έναν συγκεκριμένο πίνακα σε οποιαδήποτε περίοδο λειτουργίας και οποιοδήποτε εύρος. IDENT_CURRENT Δεν περιορίζεται από το εύρος και τη συνεδρία, αλλά από έναν καθορισμένο πίνακα. IDENT_CURRENT Επιστρέφει την τιμή που δημιουργήθηκε για έναν συγκεκριμένο πίνακα σε οποιαδήποτε περίοδο λειτουργίας και εύρος.
@@IDENTITY Επιστρέφει την τελευταία τιμή αναγνώρισης που δημιουργήθηκε για οποιονδήποτε πίνακα σε όλα τα πεδία της τρέχουσας περιόδου λειτουργίας.
SCOPE_IDENTITY Επιστρέφει την τελευταία προσδιορισμένη τιμή που δημιουργήθηκε για την τρέχουσα περίοδο λειτουργίας και οποιονδήποτε πίνακα στο τρέχον εύρος
SCOPE_IDENTITY και @@IDENTITY επιστρέφουν την τελευταία τιμή αναγνώρισης που δημιουργήθηκε σε οποιονδήποτε πίνακα στην τρέχουσα περίοδο λειτουργίας. Ωστόσο, SCOPE_IDENTITY επιστρέφει μόνο τιμές που έχουν εισαχθεί στο τρέχον εύρος. @@IDENTITY Δεν περιορίζεται σε συγκεκριμένο πεδίο εφαρμογής.
Για παράδειγμα, υπάρχουν δύο πίνακες, T1 και T2, στους οποίους ορίζεται ένα έναυσμα INSERT. Όταν εισάγεται μια γραμμή στο T1, ενεργοποιείται η σκανδάλη και εισάγεται μια γραμμή στο T2. Αυτό το παράδειγμα απεικονίζει δύο πεδία: ένα στο T1 και ένα στο T2 ως αποτέλεσμα του εναύσματος.
Υποθέτοντας ότι τόσο το T1 όσο και το T2 έχουν στήλες IDENTITY, το @@IDENTITY και το SCOPE_IDENTITY θα επιστρέψουν διαφορετικές τιμές στο τέλος της δήλωσης INSERT στο T1.
@@IDENTITY Επιστρέφει την τελευταία τιμή της στήλης IDENTITY που εισήχθη σε οποιοδήποτε εύρος της τρέχουσας συνεδρίας, η οποία είναι η τιμή που εισήχθη στο T2.
SCOPE_IDENTITY() επιστρέφει την τιμή IDENTITY που εισήχθη στο T1, η οποία είναι η τελευταία INSERT που εμφανίστηκε στο ίδιο εύρος. Εάν η συνάρτηση SCOPE_IDENTITY() κληθεί πριν από την εμφάνιση της δήλωσης εισαγωγής στη στήλη ταυτότητας, η συνάρτηση επιστρέφει μια τιμή NULL.
Οι τιμές που επιστρέφονται από IDENT_CURRENT('T1') και IDENT_CURRENT('T2') είναι οι τελευταίες αυτοαυξητικές τιμές των δύο πινάκων, αντίστοιχα.
Το πείραμα του AJQC: (40 τοπικά νήματα, 40+40 απομακρυσμένα νήματα ταυτόχρονα δοκιμή, εισαγωγή σειρών 1200W), το συμπέρασμα είναι:
1. Σε τυπικές διαδοχικές εφαρμογές. @@IDENTITY δεν μπορούν να χρησιμοποιηθούν και θα προκύψουν ταυτόχρονες διενέξεις όταν το 1W είναι πολλαπλών σειρών σε μηχανήματα SD CII850, 256M. Στα P42.8C και 512M DDR, υπάρχει ταυτόχρονη σύγκρουση όταν υπάρχουν μόνο περισσότερες από 6000 γραμμές.
Το 2.SCOPE_IDENTITY() είναι απολύτως αξιόπιστο και μπορεί να χρησιμοποιηθεί στη διαδικασία αποθήκευσης, ακόμη και οι ενεργοποιητές δεν χρειάζεται να κατασκευαστούν και δεν υπάρχουν ταυτόχρονες διενέξεις
SELECT IDENT_CURRENT('TableName') - Επιστρέφει την τελευταία τιμή ετικέτας που δημιουργήθηκε στον καθορισμένο πίνακα
SELECT IDENT_INCR('TableName') - επιστρέφει την επισημασμένη τιμή αύξησης πεδίου για τον καθορισμένο πίνακα
SELECT IDENT_SEED('TableName') - επιστρέφει την επισημασμένη τιμή σπόρου πεδίου του καθορισμένου πίνακα
Επιστρέφει τον αυτόματο αριθμό της τελευταίας εγγραφής που εισήχθη
SELECT IDENT_CURRENT('ΌνομαΠίνακα')
Επιστροφή στον επόμενο αυτόματο αριθμό:
SELECT IDENT_CURRENT('TableName')+(SELECT IDENT_INCR('TableName'))
SELECT @@IDENTITY - Επιστρέφει την τελευταία επισημασμένη τιμή που δημιουργήθηκε σε όλους τους πίνακες της τρέχουσας συνεδρίας
|