Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 11405|Απάντηση: 0

[Συμβουλές] Η sql λαμβάνει την τιμή του πρωτεύοντος κλειδιού μετά την αναμονή για το INSERT

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 5/5/2015 5:35:51 μ.μ. | | |

Λειτουργία ανάκτησης τιμής αναγνώρισης στον 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





Προηγούμενος:Γιατί πήγαν όλοι στις διακοπές της Πρωτομαγιάς;
Επόμενος:Ποια είναι η διαφορά μεταξύ του SCOPE_IDENTITY() που γράφεται πριν και μετά στην t-sql;
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com