Συμπτώματα
Όταν εκτελείτε μια ενημέρωση σε έναν πίνακα που έχει ένα συμπλέγματος ή μοναδικό ευρετήριο και η ενημέρωση πραγματοποιείται σε μια μη κύρια στήλη μοναδικών τιμών, η εγγραφή παρακολούθησης αλλαγών δεν συμφωνεί με την πρόταση ενημέρωσης.
Για παράδειγμα, ας υποθέσουμε ότι μια στήλη που ονομάζεται "στήλη1" περιλαμβάνεται στο συμπλέγματος ή το μοναδικό ευρετήριο. Όταν η τιμή της στήλης αλλάζει από μεγαλύτερη σε μικρότερη τιμή (όπως η αλλαγή της τιμής από 20 σε 16), ο πλαϊνός πίνακας παρακολούθησης αλλαγών λαμβάνει τη λειτουργία εισαγωγής πριν από τη λειτουργία διαγραφής. Για παράδειγμα, η λειτουργία εισαγωγής εγγραφής γραμμής του αρχείου καταγραφής συναλλαγών λαμβάνεται πριν από τη λειτουργία διαγραφής γραμμής ή το "I" πριν από το "D".
Sys_change_version |
sys_change_create_version |
sys_change_operation |
sys_change_column |
sys_change_context |
PK_column |
1116 |
19 |
I |
NULL |
NULL |
5639485628 |
1116 |
20 |
D |
NULL |
NULL |
5639485628 |
Όταν η τιμή στήλης αλλάζει από μικρότερη σε μεγαλύτερη τιμή (όπως η αλλαγή της τιμής από 16 σε 20), το "D" εισάγεται πριν από το "I".
Sys_change_version |
sys_change_create_version |
sys_change_operation |
sys_change_column |
sys_change_context |
PK_column |
1126 |
32 |
D |
NULL |
NULL |
5639485628 |
1126 |
33 |
I |
NULL |
NULL |
5639485628 |
Αιτία
Αυτό το πρόβλημα παρουσιάζεται λόγω εσφαλμένης ταξινόμησης μεταξύ ζευγών delete/insert στον πλευρικό πίνακα παρακολούθησης αλλαγών.
Επίλυση
Η επιδιόρθωση για αυτό το πρόβλημα περιλαμβάνεται στις ακόλουθες ενημερώσεις για SQL Server:
Συγκεντρωτική ενημέρωση 8 για SQL Server 2017
Συγκεντρωτική ενημέρωση 9 για SQL Server 2016 Service Pack 1
Πληροφορίες για τις εκδόσεις SQL Server
Κάθε νέα έκδοση για SQL Server περιέχει όλες τις άμεσες επιδιορθώσεις και τις επιδιορθώσεις ασφαλείας που υπήρχαν στην προηγούμενη δομή. Συνιστάται να εγκαταστήσετε την πιο πρόσφατη έκδοση για SQL Server:
Τελευταία συγκεντρωτική ενημέρωση για SQL Server 2017
Κατάσταση
Η Microsoft έχει επιβεβαιώσει ότι πρόκειται για πρόβλημα στα προϊόντα της Microsoft που αναφέρονται στην ενότητα "Ισχύει για".
Περισσότερες πληροφορίες
Για έναν πίνακα με δυνατότητα παρακολούθησης αλλαγών, όταν μια ενημέρωση πραγματοποιείται σε μια μη κύρια στήλη που έχει οριστεί ως μοναδική, εισάγονται δύο καταχωρήσεις στον πλευρικό πίνακα παρακολούθησης αλλαγών: Μία καταχώρηση για κάθε μία από τις ενέργειες διαίρεσης, Εισαγωγή και Διαγραφή.
Όταν η συνάρτηση CHANGETABLE καλείται για την απαρίθμηση των αλλαγών, αυτές οι καταχωρήσεις ταξινομούνται κατά τιμές πρωτεύοντος κλειδιού και, στη συνέχεια, οι λειτουργίες συναθροίζονται. Εάν η ενημέρωση εισαγάγει μια χαμηλότερη τιμή, εκτελείται πρώτα μια λειτουργία "I" στον πλευρικό πίνακα, ακολουθούμενη από μια λειτουργία "D". Αυτό προκαλεί την επιστροφή μιας εσφαλμένης λειτουργίας για αυτήν τη γραμμή. Αυτό συμβαίνει επειδή το "I" που ακολουθείται από το "D" αθροίζεται ως "D".
Επειδή μόνο οι τιμές του πρωτεύοντος κλειδιού διατηρούνται στους πλαϊνούς πίνακες, δεν είναι απαραίτητο να έχετε δύο ξεχωριστές καταχωρήσεις. Αυτό ισχύει εφόσον η στήλη πρωτεύοντος κλειδιού δεν ενημερώνεται.
Αυτό το πρόβλημα έχει διορθωθεί για μη κύριες στήλες μοναδικών τιμών. Σε αυτή την περίπτωση, όταν παρουσιάζεται η ενημέρωση, εισάγεται μόνο μία γραμμή με το "U" ως λειτουργία ενημέρωσης αντί για δύο καταχωρήσεις που έχουν τα γράμματα "D" και "I".
Αναφορές
Ενημερωθείτε σχετικά με την ορολογία που χρησιμοποιεί η Microsoft για την περιγραφή των ενημερώσεων λογισμικού.