Η Microsoft κατανέμει τις επιδιορθώσεις του Microsoft SQL Server 2008 R2 Service Pack 1 (SP1) ως ένα αρχείο με δυνατότητα λήψης. Επειδή οι επιδιορθώσεις είναι αθροιστικές, κάθε νέα έκδοση περιέχει όλες τις επείγουσες επιδιορθώσεις και όλες τις ενημερώσεις κώδικα ασφαλείας που συμπεριλήφθηκαν με την προηγούμενη έκδοση της ενημέρωσης κώδικα του SQL Server 2008 R2 Service Pack 1 (SP1).
Συμπτώματα
Εξετάστε το ακόλουθο σενάριο:
-
Έχετε μια στήλη τύπου δεδομένων DateTimeOffset σε έναν πίνακα στον Microsoft sql Server 2008 R2 ή στον Microsoft sql Server 2012.
-
Μπορείτε να δημιουργήσετε ένα ευρετήριο στη στήλη DateTimeOffset .
-
Μπορείτε να μετατρέψετε τον τύπο δεδομένων DateTimeOffset σε τύπο δεδομένων smalldatetime χρησιμοποιώντας τη συνάρτηση cast ή convert χωρίς το όρισμα στυλ ή όταν η τιμή του ορίσματος στυλ είναι 0.
-
Το αποτέλεσμα της συνάρτησης cast ή convert χρησιμοποιείται σε ένα φίλτρο σε ένα ερώτημα Transact-SQL.
-
Μπορείτε να εκτελέσετε το ερώτημα Transact-SQL.
Σε αυτό το σενάριο, το αποτέλεσμα που επιστρέφεται από το ερώτημα είναι εσφαλμένο, επειδή το φίλτρο δεν λειτουργεί σωστά. Για παράδειγμα, ας υποθέσουμε ότι η στήλη DateTimeOffset που ονομάζεται "Date" περιέχει τις ακόλουθες τιμές:
-
2011-05-21 23:00:00 -01:00
-
2011-05-21 23:00:00 +00:00
-
2011-05-21 23:00:00 +01:00
Μπορείτε να εκτελέσετε το ακόλουθο ερώτημα:
SELECT Date FROM TestTable WHERE CAST(Date AS smalldatetime)= '2011-05-21 23:00:00'
Το αποτέλεσμα του ερωτήματος επιστρέφει μόνο μία γραμμή. Ωστόσο, το αναμενόμενο αποτέλεσμα θα πρέπει να επιστρέφει γραμμές και για τις τρεις τιμές.
Επίλυση
Πληροφορίες αθροιστικής ενημέρωσης
SQL Server 2012
Η επιδιόρθωση για αυτό το πρόβλημα κυκλοφόρησε για πρώτη φορά στην αθροιστική ενημερωμένη έκδοση 3 για τον SQL Server 2012. Για περισσότερες πληροφορίες σχετικά με αυτό το πακέτο αθροιστικής ενημερωμένης έκδοσης, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft:
2723749 Πακέτο αθροιστικών ενημερώσεων 3 για τον SQL Server 2012Σημείωση Επειδή το build που είναι αθροιστικές, κάθε νέα έκδοση της ενημέρωσης κώδικα περιέχει όλες τις επείγουσες επιδιορθώσεις και όλες τις ενημερώσεις κώδικα ασφαλείας που συμπεριλήφθηκαν με την προηγούμενη SQL Server 2012 έκδοση της ενημέρωσης κώδικα. Η Microsoft συνιστά να εξετάσετε την εφαρμογή της πιο πρόσφατης έκδοσης της ενημέρωσης κώδικα που περιέχει αυτήν την επείγουσα επιδιόρθωση. Για περισσότερες πληροφορίες, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για προβολή του άρθρου στη Γνωσιακή Βάση της Microsoft:
2692828 Ο SQL Server 2012 δημιουργεί τα οποία κυκλοφόρησαν μετά την κυκλοφορία του SQL Server 2012 Πρέπει να εφαρμόσετε μια επείγουσα επιδιόρθωση του SQL Server 2012 σε μια εγκατάσταση του SQL Server 2012.
SQL Server 2008 R2 Service Pack 2
Η επιδιόρθωση για αυτό το πρόβλημα κυκλοφόρησε πρώτα στην αθροιστική ενημερωμένη έκδοση 1 για τον SQL Server 2008 R2 Service Pack 2. Για περισσότερες πληροφορίες σχετικά με τον τρόπο απόκτησης αυτού του πακέτου αθροιστικής ενημερωμένης έκδοσης, κάντε κλικ στον αριθμό του άρθρου παρακάτω για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft:
2720425 Πακέτο αθροιστικών ενημερώσεων 1 για τον SQL Server 2008 R2 Service Pack 2Σημείωση Επειδή οι εκδόσεις είναι αθροιστικές, κάθε νέα έκδοση της ενημέρωσης κώδικα περιέχει όλες τις επείγουσες επιδιορθώσεις και όλες τις ενημερώσεις κώδικα ασφαλείας που συμπεριλήφθηκαν στην προηγούμενη έκδοση της ενημέρωσης κώδικα του SQL Server 2008 R2. Συνιστάται να εξετάσετε την εφαρμογή της πιο πρόσφατης έκδοσης της ενημέρωσης κώδικα που περιέχει αυτήν την επείγουσα επιδιόρθωση. Για περισσότερες πληροφορίες, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για προβολή του άρθρου στη Γνωσιακή Βάση της Microsoft:
2730301 Οι εκδόσεις του SQL Server 2008 R2 που κυκλοφόρησαν μετά την κυκλοφορία του SQL Server 2008 R2 Service Pack 2
SQL Server 2008 R2 SP1
Η επιδιόρθωση για αυτό το πρόβλημα κυκλοφόρησε πρώτα στην αθροιστική ενημερωμένη έκδοση 7. Για περισσότερες πληροφορίες σχετικά με τον τρόπο απόκτησης αυτού του πακέτου αθροιστικής ενημερωμένης έκδοσης για τον SQL Server 2008 R2 Service Pack 1, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft:
2703282 Πακέτο αθροιστικών ενημερώσεων 7 για τον SQL Server 2008 R2 SP1Σημείωση Επειδή το build που είναι αθροιστικές, κάθε νέα έκδοση της ενημέρωσης κώδικα περιέχει όλες τις επείγουσες επιδιορθώσεις και όλες τις ενημερώσεις κώδικα ασφαλείας που συμπεριλήφθηκαν με το προηγούμενο SQL Server 2008 R2 Service Pack 1 έκδοση της ενημέρωσης κώδικα. Συνιστάται να εξετάσετε την εφαρμογή της πιο πρόσφατης έκδοσης της ενημέρωσης κώδικα που περιέχει αυτήν την επείγουσα επιδιόρθωση. Για περισσότερες πληροφορίες, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για προβολή του άρθρου στη Γνωσιακή Βάση της Microsoft:
2567616 Οι εκδόσεις του SQL Server 2008 R2 που κυκλοφόρησαν μετά την κυκλοφορία του SQL Server 2008 R2 SP1
Περισσότερες πληροφορίες
Για να αναπαραγάγετε το πρόβλημα, ακολουθήστε τα παρακάτω βήματα:
-
Εκτελέστε το ακόλουθο ερώτημα, για να δημιουργήσετε έναν πίνακα με μια στήλη DateTimeOffset και να εισαγάγετε ορισμένες εγγραφές:CREATE TABLE #TestTimeZones (dto datetimeoffset(0)); GO INSERT INTO #TestTimeZones(dto) VALUES ('2011-05-21 23:00:00 -01:00'), ('2011-05-21 23:00:00 +00:00'), ('2011-05-21 23:00:00 +01:00'); GO
-
Εκτελέστε το ακόλουθο ερώτημα και μπορείτε να δείτε ότι και οι τρεις τιμές παρατίθενται σωστά στο αποτέλεσμα που επιστρέφεται:DECLARE @t smalldatetime = '2011-05-21 23:00:00' SELECT dto AS withoutIndex FROM #TestTimeZones WHERE CAST(dto AS smalldatetime)=@t;
-
Εκτελέστε το ακόλουθο ερώτημα, για να δημιουργήσετε ένα ευρετήριο στη στήλη "DTO" και να επαναλάβετε το ίδιο ερώτημα:CREATE INDEX IX_testTimeZones_Dto ON #TestTimeZones(dto); GO -- Repeat the same query DECLARE @t smalldatetime = '2011-05-21 23:00:00' SELECT dto AS withIndex FROM #TestTimeZones WHERE CAST(dto A smalldatetime)=@t; GO
-
Εκτελέστε ξανά το ερώτημα στο βήμα 2. Αυτή τη φορά, το ερώτημα επιστρέφει μόνο μία γραμμή.
-
Εκτελέστε το ακόλουθο ερώτημα για να διαγράψετε το ευρετήριο και τον πίνακα που δημιουργήσατε:DROP INDEX IX_testTimeZones_Dto ON #TestTimeZones; GO DROP TALBE #TestTimeZones; GO
Αναφορές
Για περισσότερες πληροφορίες σχετικά με τις συναρτήσεις CAST και CONVERT, μεταβείτε στην ακόλουθη τοποθεσία Web του MSDN:
Γενικές πληροφορίες σχετικά με τις συναρτήσεις CAST και CONVERT στον SQL Server
Κατάσταση
Η Microsoft έχει επιβεβαιώσει ότι πρόκειται για ένα πρόβλημα στα προϊόντα της Microsoft που παρατίθενται στην ενότητα "ισχύει για".