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

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

Συμπτώματα

Ας υποθέσουμε ότι εκτελείτε ένα ερώτημα σε μια παρουσία του Microsoft SQL Server 2005 ή του Microsoft SQL Server 2008 ή του Microsoft SQL Server 2008 R2 που ικανοποιεί τις ακόλουθες συνθήκες:

  • Το ερώτημα περιέχει έναν σχεσιακό τελεστή. Για παράδειγμα, ο τελεστής less of (<).

  • Υπάρχει μια συνάρτηση DateDiff στον τελεστέο του σχεσιακού τελεστή.

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

Αιτία

Αυτό το ζήτημα παρουσιάζεται επειδή η βελτιστοποίηση του SQL Server υποτιμά τον αριθμό των γραμμών που θα επιστραφούν όταν χρησιμοποιείτε τη συνάρτηση DateDiff .

Επίλυση

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

SQL Server 2005 Service Pack 3

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

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

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

SQL Server 2005 Service Pack 4

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

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

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

SQL Server 2008 Service Pack 1

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

2497673 Αθροιστική ενημερωμένη έκδοση πακέτου 13 για τον 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 δημιουργούνται για συγκεκριμένα Service Pack του SQL Server. Πρέπει να εφαρμόσετε μια επείγουσα επιδιόρθωση του SQL Server 2008 Service Pack 1 σε μια εγκατάσταση του SQL Server 2008 Service Pack 1. Από προεπιλογή, οποιαδήποτε επείγουσα επιδιόρθωση που παρέχεται σε ένα Service Pack του SQL Server περιλαμβάνεται στο επόμενο Service Pack του SQL Server.

SQL Server 2008 Service Pack 2

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

2498535 Πακέτο αθροιστικών ενημερώσεων 3 για τον 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 δημιουργούνται για συγκεκριμένα Service Pack του SQL Server. Πρέπει να εφαρμόσετε μια επείγουσα επιδιόρθωση του SQL Server 2008 Service Pack 2 σε μια εγκατάσταση του SQL Server 2008 Service Pack 2. Από προεπιλογή, οποιαδήποτε επείγουσα επιδιόρθωση που παρέχεται σε ένα Service Pack του SQL Server περιλαμβάνεται στο επόμενο Service Pack του SQL Server.

SQL Server 2008 R2 Service Pack 1

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

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

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

SQL Server 2008 R2

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

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

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

Κατάσταση

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

Λύση

Για να επιλύσετε αυτό το ζήτημα, ξαναγράψτε το ερώτημα, έτσι ώστε το σχέδιο ερωτήματος να μην χρησιμοποιεί τη συνάρτηση DateDiff σε κατηγόρημα. Για παράδειγμα, τα παρακάτω ενδέχεται να εκτελούνται αργά:create procedure proc_test @date datetimeasselect COUNT (*) from t where c1 <DATEADD(mm, DATEDIFF(mm,0,dateadd(month, -6,@date)), 0) Ωστόσο, μπορείτε να ξαναγράψετε το ερώτημα ως εξής για να επιλύσετε το πρόβλημα:create procedure proc_test2 @date datetimeasdeclare @datestr nvarchar(50), @sqlstr nvarchar(1024)set @datestr = CAST (DATEADD(mm, DATEDIFF(mm,0,dateadd(month, -6,@date)), 0) as nvarchar(50))set @sqlstr ='select COUNT (*) from t where c1 < ''' + @datestr + ''''exec (@sqlstr)

Αναφορές

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

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

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

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

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

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

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

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

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

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

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

×