Μετάβαση στο κύριο περιεχόμενο
Υποστήριξη
Είσοδος με Microsoft
Είσοδος ή δημιουργία λογαριασμού.
Γεια σας,
Επιλέξτε διαφορετικό λογαριασμό.
Έχετε πολλούς λογαριασμούς
Επιλέξτε τον λογαριασμό με τον οποίο θέλετε να εισέλθετε.

Συμπτώματα

Όταν χρησιμοποιείτε συναρτήσεις SCOPE_IDENTITY() ή @@IDENTITY γιανα ανακτήσετε τις τιμές που έχουν εισαχθεί σε μια στήλη ταυτότητας, ενδέχεται να παρατηρήσετε ότι αυτές οι συναρτήσεις μερικές φορές επιστρέφουν εσφαλμένες τιμές. Το πρόβλημα παρουσιάζεται μόνο όταν τα ερωτήματά σας χρησιμοποιούν προγράμματα παράλληλης εκτέλεσης. Για περισσότερες πληροφορίες σχετικά με τον τρόπο για να προσδιορίσετε εάν τα ερωτήματά σας πρόκειται να χρησιμοποιήσουν προγράμματα παράλληλης εκτέλεσης, ανατρέξτε στην ενότητα παραλληλισμός εντός ερωτήματος στο ακόλουθο τεχνικό άρθρο σχετικά με τα στοιχεία λήψης της Microsoft:

Αιτία

Η Microsoft έχει επιβεβαιώσει ότι αυτό είναι ένα πρόβλημα στα προϊόντα της Microsoft που παρατίθενται στην αρχή αυτού του άρθρου.

Επίλυση

Πληροφορίες αθροιστικής ενημέρωσης

SQL Server 2008 R2 Service Pack 1

Η επιδιόρθωση για αυτό το πρόβλημα κυκλοφόρησε για πρώτη φορά στην Αθροιστική ενημέρωση 5 για SQL Server 2008 R2 Service Pack 1. Για περισσότερες πληροφορίες σχετικά με τον τρόπο απόκτησης αυτού του πακέτου αθροιστικής ενημέρωσης, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft: 

2659694Πακέτο αθροιστικής ενημέρωσης 5 για τον SQL Server 2008 R2 Service Pack 1

Σημείωση Επειδή οι εκδόσεις είναι αθροιστικές, κάθε νέα έκδοση επιδιόρθωσης περιέχει όλες τις επείγουσες επιδιορθώσεις και όλες τις επιδιορθώσεις ασφαλείας που περιλαμβάνονταν στην προηγούμενη έκδοση επιδιόρθωσης του SQL Server 2008 R2. Συνιστάται να εξετάσετε το ενδεχόμενο να εφαρμόσετε την πιο πρόσφατη έκδοση επιδιόρθωσης που περιέχει αυτή την άμεση επιδιόρθωση. Για περισσότερες πληροφορίες, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για προβολή του άρθρου στη Γνωσιακή Βάση της Microsoft:

2567616Οι εκδόσεις του SQL Server 2008 R2 που κυκλοφόρησαν μετά την κυκλοφορία του SQL Server 2008 R2 Service Pack 1

Λύση

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

Παράδειγμα χρήσης του όρου OUTPUT:

DECLARE @MyNewIdentityValues πίνακα(myidvalues int)
δήλωση @A πίνακα (πρωτεύον κλειδί id int)
εισαγωγή σε @A τιμών (1)
δήλωση @B πίνακα (αναγνωριστικό ταυτότητας πρωτεύοντος κλειδιού int(1;1), B int not null)
εισαγωγή σε @B τιμών (1)
επιλέξτε
    [RowCount] = @@RowCount,
    [@@IDENTITY] = @@IDENTITY,
    [SCOPE_IDENTITY] = SCOPE_IDENTITY()

ορισμός προφίλ στατιστικών στοιχείων σε
εισαγωγή σε _ddr_T
έξοδος inserted.ID σε @MyNewIdentityValues
    επιλέξτε
            
b.ID         από @A ένα
            αριστερός @B b σε b.ID = 1
            αριστερός @B b2 στις b2. B = -1

            αριστερός _ddr_T t σε t.T = -1

        όπου δεν υπάρχει (επιλέξτε * από _ddr_T t2 όπου t2.ID = -1)
Ορισμός προφίλ στατιστικών στοιχείων απενεργοποιημένη

επιλέξτε
    [RowCount] = @@RowCount,
    [@@IDENTITY] = @@IDENTITY,
    [SCOPE_IDENTITY] = SCOPE_IDENTITY(),
    [IDENT_CURRENT] = IDENT_CURRENT('_ddr_T')
επιλέξτε * από @MyNewIdentityValues
μετάβαση

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

Μέθοδος 1:

Συμπερίληψη της παρακάτω επιλογής στο ερώτημά σας

OPTION (MAXDOP 1)

Σημείωση:Αυτό μπορεί να βλάψει τις επιδόσεις του τμήματος SELECT του ερωτήματός σας.

Μέθοδος 2:

Διαβάστε την τιμή από το τμήμα SELECT σε ένα σύνολο μεταβλητών (ή μία μεταβλητή πίνακα) και, στη συνέχεια, εισαγάγετε στον πίνακα προορισμού με MAXDOP=1. Δεδομένου ότι το σχέδιο INSERT δεν θα είναι παράλληλο, θα λάβετε τη σωστή σημασιτική, αλλά η επιλογή σας θα είναι παράλληλη για να επιτύχετε τις επιθυμητές επιδόσεις.

Μέθοδος 3:

Εκτελέστε την ακόλουθη πρόταση για να ορίσετε την επιλογή μέγιστου βαθμού παραλληλισμού σε 1:

sp_configure 'μέγιστος βαθμός παραλληλισμού', 1

μετάβαση

εκ νέου ρύθμιση παραμέτρων με παράκαμψη

μετάβαση

Σημείωση:Αυτή η μέθοδος μπορεί να προκαλέσει υποβάθμιση των επιδόσεων στο διακομιστή. Δεν πρέπει να χρησιμοποιείτε αυτήν τη μέθοδο, εκτός εάν την έχετε αξιολογήσει σε περιβάλλον δοκιμής ή σταδιοποίησης.

Περισσότερες πληροφορίες

Σφάλμα microsoft Connect σε αυτό τοhttps://docs.microsoft.com/en-us/collaborate/connect-redirect

Μέγιστος βαθμός παραλληλισμού (MAXDOP)

Χρειάζεστε περισσότερη βοήθεια;

Θέλετε περισσότερες επιλογές;

Εξερευνήστε τα πλεονεκτήματα της συνδρομής, περιηγηθείτε σε εκπαιδευτικά σεμινάρια, μάθετε πώς μπορείτε να προστατεύσετε τη συσκευή σας και πολλά άλλα.

Οι κοινότητες σάς βοηθούν να κάνετε και να απαντάτε σε ερωτήσεις, να δίνετε σχόλια και να ακούτε από ειδικούς με πλούσια γνώση.

Σας βοήθησαν αυτές οι πληροφορίες;

Πόσο ικανοποιημένοι είστε με τη γλωσσική ποιότητα;
Τι επηρέασε την εμπειρία σας;
Πατώντας "Υποβολή" τα σχόλια σας θα χρησιμοποιηθούν για τη βελτίωση των προϊόντων και των υπηρεσιών της Microsoft. Ο διαχειριστής IT θα έχει τη δυνατότητα να συλλέξει αυτά τα δεδομένα. Δήλωση προστασίας προσωπικών δεδομένων.

Σας ευχαριστούμε για τα σχόλιά σας!

×