KB2433265 - ΔΙΟΡΘΩΣΗ: Ενδέχεται να λάβετε ένα εσφαλμένο αποτέλεσμα όταν εκτελείτε ένα ερώτημα που χρησιμοποιεί τη συνάρτηση ROW_NUMBER μαζί με έναν αριστερό εξωτερικό σύνδεσμο στο SQL Server 2008 και SQL Server 2008 R2

Ισχύει για
SQL Server 2008 Enterprise SQL Server 2008 Standard SQL Server 2008 Workgroup SQL Server 2008 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Standard SQL Server 2008 R2 Workgroup SQL Server 2008 R2 Developer

Η Microsoft διανέμει τις διορθώσεις του Microsoft SQL Server 2008 ως ένα αρχείο με δυνατότητα λήψης. Επειδή οι ενημερώσεις κώδικα είναι αθροιστικές, κάθε νέα έκδοση περιέχει όλες τις επείγουσες επιδιορθώσεις και όλες τις ενημερώσεις κώδικα ασφαλείας που συμπεριλήφθηκαν με την προηγούμενη SQL Server 2008 έκδοση της ενημέρωσης κώδικα.

Συμπτώματα

Εξετάστε το ακόλουθο σενάριο.

  • Έχετε ένα ερώτημα που χρησιμοποιεί τη συνάρτηση ROW_NUMBER μαζί με έναν αριστερό εξωτερικό σύνδεσμο στο Microsoft SQL Server 2008.
  • Μπορείτε να δημιουργήσετε μια πρόταση SELECT, που χρησιμοποιεί το ερώτημα ως δευτερεύον ερώτημα και επιστρέφει μοναδικές γραμμές, χρησιμοποιώντας τη λέξη-κλειδί DISTINCT.
  • Μπορείτε να εκτελέσετε αυτή την πρόταση SELECT.

Σε αυτό το σενάριο, ενδέχεται να λάβετε ένα εσφαλμένο αποτέλεσμα. Ο αριστερός εξωτερικός σύνδεσμος παραβλέπεται εσφαλμένα.

Σημείωση Για περισσότερες πληροφορίες σχετικά με τον τρόπο αναπαραγωγής αυτού του ζητήματος, ανατρέξτε στην υποενότητα "Βήματα για την αναπαραγωγή αυτού του ζητήματος" στην ενότητα "Περισσότερες πληροφορίες".

Επίλυση

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

SQL Server 2008 R2

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

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

981356 Οι SQL Server δομές του 2008 R2 κυκλοφόρησαν μετά την κυκλοφορία του SQL Server 2008 R2

SQL Server 2008 Service Pack 1

Η ενημέρωση κώδικα για αυτό το ζήτημα κυκλοφόρησε πρώτα στην αθροιστική ενημερωμένη έκδοση 11 για SQL Server 2008 Service Pack 1.

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

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

970365 Οι εκδόσεις του SQL Server 2008 που κυκλοφόρησαν μετά την κυκλοφορία του SQL Server 2008 Service Pack 1 Οι επείγουσες επιδιορθώσεις του Microsoft SQL Server 2008 δημιουργούνται για συγκεκριμένα SQL Server service pack. Πρέπει να εφαρμόσετε μια επείγουσα επιδιόρθωση του SQL Server 2008 Service Pack 1 σε μια εγκατάσταση του SQL Server 2008 Service Pack 1. Από προεπιλογή, οποιαδήποτε επείγουσα επιδιόρθωση παρέχεται σε ένα SQL Server service pack περιλαμβάνεται στο επόμενο SQL Server service pack.

SQL Server 2008 Service Pack 2

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

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

2402659 Οι εκδόσεις του SQL Server 2008 που κυκλοφόρησαν μετά την κυκλοφορία του SQL Server 2008 Service Pack 2 Οι επείγουσες επιδιορθώσεις του Microsoft SQL Server 2008 δημιουργούνται για συγκεκριμένα SQL Server service pack. Πρέπει να εφαρμόσετε μια επείγουσα επιδιόρθωση του SQL Server 2008 Service Pack 2 σε μια εγκατάσταση του SQL Server 2008 Service Pack 2. Από προεπιλογή, οποιαδήποτε επείγουσα επιδιόρθωση παρέχεται σε ένα SQL Server service pack περιλαμβάνεται στο επόμενο SQL Server service pack.

Κατάσταση

Η Microsoft έχει επιβεβαιώσει ότι πρόκειται για ένα ζήτημα που αφορά τα προϊόντα της Microsoft που παρατίθενται στην ενότητα "Ισχύει για".

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

Βήματα για την αναπαραγωγή αυτού του ζητήματος

  1. Εκτελέστε τις ακόλουθες προτάσεις. Αυτές οι δηλώσεις δημιουργούν δύο πίνακες και εισάγουν μερικά δεδομένα στους πίνακες.

    create table A (a1 int)
    
    create table B (b1 int)
    
    
    
    insert into A values(1)
    
    insert into B values(1)
    
    insert into B values(1)
    
  2. Εκτελέστε την ακόλουθη πρόταση. Αυτή η πρόταση χρησιμοποιεί τη συνάρτηση ROW_NUMBER μαζί με έναν αριστερό εξωτερικό σύνδεσμο.

    select a1, row_number() over (partition by a1 order by a1) as a3
    
    from A
    
    left join B ON A.a1 = B.b1
    
  3. Εκτελέστε την ακόλουθη πρόταση. Αυτή η πρόταση χρησιμοποιεί το ερώτημα στο βήμα 2 ως δευτερεύον ερώτημα:

    select distinct a1, a3
    
    from (
    
          select a1, row_number() over (partition by a1 order by a1) as a3
    
          from A
    
          left join B ON A.a1 = B.b1
    
    ) as x
    

Σημείωση Το ερώτημα στο βήμα 3 επιστρέφει ένα εσφαλμένο αποτέλεσμα όταν παρουσιαστεί αυτό το ζήτημα.

Παραπομπές

Για περισσότερες πληροφορίες σχετικά με τη συνάρτηση ROW_NUMBER και τους εξωτερικούς συνδέσμους, επισκεφθείτε τις ακόλουθες τοποθεσίες Web του Microsoft Developer Network (MSDN):

Για περισσότερες πληροφορίες σχετικά με το μοντέλο τμηματικής συντήρησης για το SQL Server, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft:

935897 Ένα μοντέλο τμηματικής συντήρησης είναι διαθέσιμο από την ομάδα SQL Server για την παροχή επειγουσών επιδιορθώσεων για τα προβλήματα που έχουν αναφερθεί

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

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

824684 Περιγραφή της βασικής ορολογίας που χρησιμοποιείται για την περιγραφή ενημερωμένων εκδόσεων λογισμικού της Microsoft