KB2380435 - ΕΠΙΔΙΌΡΘΩΣΗ: Το σχέδιο ερωτήματος για μια αποθηκευμένη διαδικασία δεν αποθηκεύεται στο cache εάν η αποθηκευμένη διαδικασία χρησιμοποιεί μια μεταβλητή BLOB και η μεταβλητή χρησιμοποιείται σε μια συνάρτηση συμβολοσειράς στο Microsoft SQL Server 2008 ή στο Microsoft SQL Server 2008 R2

Ισχύει για
SQL Server 2008 SQL Server 2008 R2

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

Συμπτώματα

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

  • Μπορείτε να δημιουργήσετε μια αποθηκευμένη διαδικασία στο Microsoft SQL Server 2008 ή στο Microsoft SQL Server 2008 R2.
  • Η αποθηκευμένη διαδικασία χρησιμοποιεί μια δυαδική μεταβλητή μεγάλου αντικειμένου (BLOB).
  • Η μεταβλητή BLOB χρησιμοποιείται σε μια συνάρτηση συμβολοσειράς.
  • Μπορείτε να εκτελέσετε την αποθηκευμένη διαδικασία.

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

Επίλυση

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

SQL Server 2008 Service Pack 1

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

2279604 Αθροιστική ενημερωμένη έκδοση πακέτου 10 για 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

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

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

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

SQL Server 2008 R2

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

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

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

Κατάσταση

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

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

Για να αναπαραγάγετε αυτό το ζήτημα, ακολουθήστε τα εξής βήματα:

  1. Εκτελέστε τον παρακάτω κώδικα για να δημιουργήσετε δύο αποθηκευμένες διαδικασίες ("p_test1" και "p_test2"). Το "P_test1" χρησιμοποιεί μια μεταβλητή BLOB και το "p_test2" χρησιμοποιεί μια μεταβλητή nvarchar(100). Χρήση tempdb
    μετάβαση
    Εάν η OBJECT_ID('p_test1') δεν είναι null drop proc p_test1
    Εάν OBJECT_ID('p_test2') δεν είναι null drop proc p_test2
    μετάβαση
    Δημιουργία p_test1 διαδικασίας
    @s nvarchar(max)
    ως
    εκκίνηση
    Επιλέξτε * από sys.objects
    όπου name = UPPER(@s)
    τέλος
    μετάβαση
    Δημιουργία διαδικασίας p_test2
    @s Νβαρσάρ(100)
    ως
    εκκίνηση
    Επιλέξτε * από sys.objects
    όπου name = UPPER(@s)
    τέλος
    μετάβαση

  2. Εκτελέστε τον ακόλουθο κώδικα για να εκκαθαρίσετε τη μνήμη cache διαδικασίας και να εκτελέσετε τις δύο αποθηκευμένες διαδικασίες:dbcc, freeproccache
    μετάβαση
    exec p_test1 n'abc'
    exec p_test2 n'abc'
    μετάβαση

  3. Εκτελέστε τον παρακάτω κώδικα για να ελέγξετε το σχέδιο τοπικής αποθήκευσης: select object_name(CONVERT(int, a.value)), cp.*
    Από sys.dm_exec_cached_plans CP
    Διασταυρούμενη εφαρμογή sys.dm_exec_plan_attributes(cp.plan_handle) A
    όπου cp.objtype = 'Proc'
    και a.attribute = 'objectid'

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

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

263889 Περιγραφή του αποκλεισμού SQL Server που προκαλείται από κλειδαριές μεταγλώττισης

Παραπομπές

Για περισσότερες πληροφορίες σχετικά με τις συναρτήσεις συμβολοσειράς (Transact-SQL), επισκεφθείτε την ακόλουθη τοποθεσία της Microsoft στο Web:

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

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

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

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

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