Λειτουργία ανάκτησης τιμής αναγνώρισης στον SQL SERVER 2000 Στον SQL Server 2000, η στήλη ταυτότητας ορίζεται από την IDENTITY και τα ακόλουθα σχετίζονται με τη λήψη της τιμής ταυτότητας της τελευταίας εγγραφής που εισήχθη
Ένα παράδειγμα απεικόνισης της λειτουργίας του off
Στον SQL Server, μπορείτε να χρησιμοποιήσετε τα SCOPE_IDENTITY(), @@IDENTITY, IDENT_CURRENT() για να λάβετε την τιμή της τελευταίας εγγραφής που εισήχθη και η διαφορά μεταξύ τους είναι: SCOPE_IDENTITY() επιστρέφει την τελευταία τιμή IDENTITY που εισήχθη μέσα στη στήλη IDENTITY στο ίδιο εύρος. Ένα πεδίο εφαρμογής είναι μια ενότητα - αποθηκευμένες διαδικασίες, ενεργοποιητές, λειτουργίες
Αριθμοί ή παρτίδες. Επομένως, εάν δύο εντολές βρίσκονται στην ίδια αποθηκευμένη διαδικασία, συνάρτηση ή δέσμη, βρίσκονται στο ίδιο εύρος. @@IDENTITY Επιστρέφει την τελευταία τιμή αναγνώρισης που δημιουργήθηκε σε όλους τους πίνακες της τρέχουσας περιόδου λειτουργίας IDENT_CURRENT() επιστρέφει την τελευταία τιμή αναγνώρισης που δημιουργήθηκε για τον καθορισμένο πίνακα σε οποιαδήποτε περίοδο λειτουργίας και οποιοδήποτε εύρος Ακολουθεί ένα παράδειγμα για να δείξετε τις διαφορές τους
-- α) Δείγμα κώδικα -- =========================================== -- Δημιουργήστε έναν πίνακα δοκιμών -- =========================================== ΧΡΗΣΙΜΟΠΟΙΗΣΤΕ tempdb ΠΗΓΑΙΝΩ
ΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑ t1(id int IDENTITY,col int) ΕΙΣΑΓΩΓΗ t1 ΕΠΙΛΟΓΗ 1 ΕΝΩΣΗ ΟΛΟΙ ΕΠΙΛΕΞΤΕ 2 ΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑ t2(id int IDENTITY,col int) ΠΗΓΑΙΝΩ
ΔΗΜΙΟΥΡΓΙΑ ΣΚΑΝΔΑΛΗΣ TR_insert_t2 ΣΤΟ t2 ΓΙΑ ΈΝΘΕΤΟ ΟΠΩΣ ΚΑΙ ΕΙΣΑΓΩΓΗ t1 ΕΠΙΛΟΓΗ 3 ΠΗΓΑΙΝΩ
-- =========================================== -- Δοκιμάστε τρεις λειτουργίες: 1 -- =========================================== ΑΝΑΓΡΑΦΟΝΤΑΙ ΤΙΜΕΣ t2(1) ΕΠΙΛΈΞΤΕ [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() Για t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() Για t2]=IDENT_CURRENT(N't2')
/*--Αποτέλεσμα SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Για t1 IDENT_CURRENT() Για t2 ------------------ ------------ -------------------------- ----------------------- 1 3 3 1
(Ο αριθμός των σειρών που επηρεάζονται είναι 1 γραμμή) --*/ ΠΗΓΑΙΝΩ
-- =========================================== -- Δοκιμάστε τρεις λειτουργίες: 2 -- =========================================== ΑΝΑΓΡΑΦΟΝΤΑΙ ΤΙΜΕΣ t1(10) ΕΠΙΛΈΞΤΕ [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() Για t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() Για t2]=IDENT_CURRENT(N't2')
/*--Αποτέλεσμα SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Για t1 IDENT_CURRENT() Για t2 ------------------ ------------ -------------------------- ----------------------- 4 4 4 1
(Ο αριθμός των σειρών που επηρεάζονται είναι 1 γραμμή) --*/ ΠΗΓΑΙΝΩ
-- =========================================== -- Δοκιμάστε τρεις λειτουργίες: 3 -- ** Ανοίξτε μια νέα σύνδεση και εκτελέστε τον ακόλουθο κώδικα ** -- =========================================== ΕΠΙΛΈΞΤΕ [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() Για t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() Για t2]=IDENT_CURRENT(N't2')
/*--Αποτέλεσμα SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Για t1 IDENT_CURRENT() Για t2 ------------------ ------------ -------------------------- ----------------------- NULL NULL 4 &n
--=========================================== -- Διαγράψτε το περιβάλλον δοκιμής -- =========================================== ΠΙΝΑΚΑΣ ΠΤΩΣΗΣ t1,t2
-- β) Περιγραφή αποτελέσματος κώδικα Όπως μπορείτε να δείτε από τον παραπάνω κώδικα: IDENT_CURRENT() επιστρέφει πάντα την τελευταία αναγνωρισμένη τιμή που εισήχθη στον καθορισμένο πίνακα @@IDENTITY Επιστρέφει την τιμή ταυτότητας της τρέχουσας περιόδου λειτουργίας, είτε βρίσκεται στο ίδιο πεδίο εφαρμογής είτε όχι, στις δοκιμές 1 και 2, μπορεί να φανεί ότι επιστρέφει την τιμή ταυτότητας της εγγραφής που έχει εισαχθεί στο έναυσμα και στο
Στη δοκιμή 3, η τιμή NULL επιστρέφεται επειδή δεν υπάρχει εγγραφή εισαγωγής στην τρέχουσα περίοδο λειτουργίας Το SCOPE_IDENTITY() επιστρέφει την τιμή αναγνώρισης του ίδιου εύρους της τρέχουσας περιόδου λειτουργίας, επομένως στη δοκιμή 1, 2, επιστρέφει την τιμή που δεν επηρεάζεται από το έναυσμα και στη δοκιμή 3, επειδή η τρέχουσα περίοδος λειτουργίας δεν παρεμβάλλεται
εγγραφή, οπότε επιστρέφει NULL
|