Εισαγωγή στήλης με σύνολο ΤΑΥΤΟΤΗΤΑς

Σελίδα ενημέρωση :
Ημερομηνία δημιουργίας σελίδας :

Ο SQL Server έχει μια ιδιότητα "ΤΑΥΤΟΤΗΤΑ" που ορίζει αυτόματα τον αύξοντα αριθμό από 1 σε μια συγκεκριμένη στήλη όταν προσθέτετε μια εγγραφή. Για παράδειγμα, εάν ορίσετε ΤΗΝ ΤΑΥΤΟΤΗΤΑ στη στήλη Α και προσθέσετε 3 εγγραφές, η στήλη Α συμπληρώνεται αυτόματα με τιμές 1, 2 και 3 με τη σειρά με την οποία τις προσθέσατε.

Ακόμα και αν χρησιμοποιείτε μια δήλωση INSERT, η τιμή ορίζεται αυτόματα, επομένως δεν χρειάζεται να ορίσετε ρητά την τιμή, αλλά πιστεύω ότι υπάρχουν περιπτώσεις όπου θέλετε να ορίσετε την τιμή ρητά επειδή χρησιμοποιείται για ένα ξένο κλειδί κ.λπ.

Για παράδειγμα, ας υποθέσουμε ότι υπάρχει ένας πίνακας με την ιδιότητα "ΤΑΥΤΟΤΗΤΑ" στη στήλη "ID", όπως φαίνεται στην εικόνα.

Μια δήλωση INSERT που εισάγει μια τιμή σε αυτόν τον πίνακα, συμπεριλαμβανομένης της στήλης ID, θα έχει την εξής μορφή:

insert into [テーブル名] ([ID], [Value]) values (1, 1)

Ωστόσο, όταν προσπαθώ να το εκτελέσω, νομίζω ότι θα εμφανιστεί το ακόλουθο σφάλμα.

Msg 544, επίπεδο 16, κράτος 1, γραμμή 1 Όταν IDENTITY_INSERT έχει οριστεί σε OFF, δεν είναι δυνατή η εισαγωγή ρητών τιμών στη στήλη ταυτότητας του πίνακα «XXXXX».

Οι στήλες που έχουν οριστεί αρχικά σε ΤΑΥΤΟΤΗΤΑ θεωρείται ότι έχουν τιμές που έχουν οριστεί αυτόματα, επομένως δεν μπορείτε να ορίσετε ρητά τις τιμές.

Εάν θέλετε πραγματικά να το ορίσετε, πρέπει να ορίσετε το "IDENTITY_INSERT" σε "ON", όπως περιγράφεται στο μήνυμα σφάλματος. Ενεργοποιήστε IDENTITY_INSERT πριν από την εισαγωγή και, στη θέση ΑΠΕΝΕΡΓΟΠΟΙΗΣΗ, όταν ολοκληρωθεί το ένθετο, όπως στην ακόλουθη SQL:

set identity_insert [テーブル名] on;
insert into [テーブル名] ([ID], [Value]) values (1, 1)
set identity_insert [テーブル名] off;

-- 確認
select * from [テーブル名];

Μπορείτε τώρα να ορίσετε ρητά την τιμή και να την εισαγάγετε. Το INSERT-SELECT με τη χρήση πινάκων είναι επίσης έγκυρο.

Οι στήλες με ΤΑΥΤΌΤΗΤΑ εκχωρούνται αυτόματα τιμές από το 1, αλλά αν ορίσετε ρητά τις τιμές όπως περιγράφεται παραπάνω, ίσως αναρωτιέστε ποιος αριθμός θα αντιστοιχιστεί στη συνέχεια. Σε αυτήν την περίπτωση, η επόμενη τιμή που εκχωρείται εκχωρείται από τον αριθμό μετά την υψηλότερη προστιθέμενη αξία στον πίνακα, επομένως δεν υπάρχει διπλότυπη τιμή κατά την εισαγωγή μιας νέας εγγραφής. (Ωστόσο, υπάρχουν εξαιρέσεις λόγω αναπηρίας κ.λπ.)