KB2380435 – OPRAVA: Plán dotazov pre uloženú procedúru nie je uložený vo vyrovnávacej pamäti, ak uložená procedúra používa premennú objektu BLOB a premenná sa používa vo funkcii reťazca v Microsoft SQL Server 2008 alebo Microsoft SQL Server 2008 R2

Vzťahuje sa na
SQL Server 2008 SQL Server 2008 R2

Spoločnosť Microsoft distribuuje opravy Microsoft SQL Server 2008 a Microsoft SQL Server 2008 R2 ako jeden súbor na stiahnutie. Keďže opravy sú kumulatívne, každé nové vydanie obsahuje všetky rýchle opravy a opravy zabezpečenia, ktoré boli súčasťou predchádzajúceho vydania opráv SQL Server 2008 alebo SQL Server 2008 R2.

Príznaky

Pozrite si nasledujúci scenár:

  • Uloženú procedúru vytvoríte na Microsoft SQL Server 2008 alebo Microsoft SQL Server 2008 R2.
  • Uložená procedúra používa premennú binárneho veľkého objektu (BLOB).
  • Premenná objektu BLOB sa používa v reťazcovej funkcii.
  • Spustíte uloženú procedúru.

V tomto scenári nie je plán dotazov pre uloženú procedúru uložený vo vyrovnávacej pamäti.

Riešenie

Informácie o kumulatívnych aktualizáciách

SQL Server 2008 Service Pack 1

Oprava tohto problému bola prvýkrát vydaná v kumulatívnej aktualizácii 10 pre balík Service Pack 1 pre SQL Server 2008. Ďalšie informácie o tomto balíku kumulatívnych aktualizácií získate po kliknutí na nasledujúce číslo článku publikovaného v databáze Microsoft Knowledge Base:

2279604 Kumulatívny balík aktualizácie 10 pre balík SQL Server 2008 Service Pack 1Poznámka Keďže zostavy sú kumulatívne, každé nové vydanie opravy obsahuje všetky rýchle opravy a opravy zabezpečenia, ktoré boli zahrnuté v predchádzajúcom vydaní opráv SQL Server 2008. Spoločnosť Microsoft odporúča, aby ste zvážili použitie najnovšej opravy, ktorá obsahuje túto opravu. Ďalšie informácie nájdete v článku databázy Microsoft Knowledge Base, ktorý sa zobrazí po kliknutí na príslušné číslo článku:

970365 Zostavy SQL Server 2008, ktoré boli vydané po vydaní balíka Service Pack 1 SQL Server 2008 Rýchle opravy Microsoft SQL Server 2008 sa vytvárajú pre konkrétne balíky Service Pack SQL Server. Na inštaláciu balíka SQL Server 2008 Service Pack 1 je potrebné použiť rýchlu opravu SQL Server 2008 Service Pack 1. Predvolene je každá rýchla oprava, ktorá je súčasťou balíka Service Pack pre SQL Server, zahrnutá do ďalšieho balíka Service Pack SQL Server.

SQL Server 2008 Service Pack 2

Oprava tohto problému bola prvýkrát vydaná v kumulatívnej aktualizácii 1 pre balík Service Pack 2 pre SQL Server 2008. Ďalšie informácie o tomto balíku kumulatívnych aktualizácií získate po kliknutí na nasledujúce číslo článku publikovaného v databáze Microsoft Knowledge Base:

2289254 Kumulatívna aktualizácia 1 pre balík SQL Server 2008 Service Pack 2Note Keďže zostavy sú kumulatívne, každé nové vydanie opravy obsahuje všetky rýchle opravy a opravy zabezpečenia, ktoré boli zahrnuté v predchádzajúcom vydaní opráv SQL Server 2008. Odporúčame, aby ste zvážili použitie najnovšej opravy, ktorá obsahuje túto rýchlu opravu. Ďalšie informácie nájdete v článku databázy Microsoft Knowledge Base, ktorý sa zobrazí po kliknutí na príslušné číslo článku:

2402659 Zostavy SQL Server 2008, ktoré boli vydané po vydaní balíka Service Pack 2 SQL Server 2008

SQL Server 2008 R2

Oprava tohto problému bola prvýkrát vydaná v kumulatívnej aktualizácii 4. Ďalšie informácie o tom, ako získať tento balík kumulatívnej aktualizácie pre SQL Server 2008 R2, získate po kliknutí na nasledujúce číslo článku publikovaného v databáze Microsoft Knowledge Base:

2345451 Cumulative Update package 4 for SQL Server 2008 R2 Poznámka: Keďže zostavy sú kumulatívne, každé nové vydanie opravy obsahuje všetky rýchle opravy a opravy zabezpečenia, ktoré boli zahrnuté v predchádzajúcom vydaní opráv SQL Server 2008 R2. Odporúčame, aby ste zvážili použitie najnovšej opravy, ktorá obsahuje túto rýchlu opravu. Ďalšie informácie nájdete v článku databázy Microsoft Knowledge Base, ktorý sa zobrazí po kliknutí na príslušné číslo článku:

981356 Zostavy SQL Server 2008 R2, ktoré boli vydané po vydaní SQL Server 2008 R2

Stav

Spoločnosť Microsoft potvrdila, že ide o problém v produktoch spoločnosti Microsoft, ktoré sú uvedené v časti Vzťahuje sa na.

Ďalšie informácie

Ak chcete reprodukovať tento problém, postupujte podľa týchto krokov:

  1. Spustením nasledujúceho kódu vytvorte dve uložené procedúry ("p_test1" a "p_test2"). Argument P_test1 používa premennú objektu BLOB a p_test2 premennú nvarchar(100).
    prejsť
    If OBJECT_ID('p_test1') is Null Drop proc p_test1
    If OBJECT_ID('p_test2') is Null Drop proc p_test2
    prejsť
    create proc p_test1
    @s nvarchar(max)
    ako
    začať
    Select * from sys.objects
    kde názov = UPPER(@s)
    koniec
    prejsť
    create proc p_test2
    @s nvarchar(100)
    ako
    začať
    Select * from sys.objects
    kde názov = UPPER(@s)
    koniec
    prejsť

  2. Spustením nasledujúceho kódu vymažte vyrovnávaciu pamäť procedúr a spustite dve uložené procedúry:dbcc freeproccache
    prejsť
    exec p_test1 N'abc'
    exec p_test2 N'abc'
    prejsť

  3. Spustite nasledujúci kód a skontrolujte plán uložený vo vyrovnávacej pamäti: vyberte položku object_name(CONVERT(int; a.hodnota)), cp.*
    from sys.dm_exec_cached_plans cp
    krížové použitie sys.dm_exec_plan_attributes(cp.plan_handle) a
    kde cp.objtype = 'Proc'
    and a.attribute = 'objectid'

Poznámka: Ak existuje mnoho súbežných spustení tohto druhu uloženej procedúry v inštancii Microsoft SQL Server 2008 R2 alebo Microsoft SQL Server 2008 R2, môže dôjsť k blokovaniu spôsobenému uzamknutím kompilácie v inštancii.

Ďalšie informácie o popise blokovania SQL Server spôsobeného zámkami kompilácie nájdete v nasledujúcom článku databázy Microsoft Knowledge Base:

263889 Popis blokovania SQL Server spôsobeného zámkami kompilácie

Odkazy

Ďalšie informácie o funkciách String (Transact-SQL) získate na nasledujúcej webovej lokalite spoločnosti Microsoft:

Reťazcové funkcie (Transact-SQL) Ďalšie informácie o modeli prírastkovej údržby pre SQL Server získate po kliknutí na nasledujúce číslo článku publikovaného v databáze Microsoft Knowledge Base:

935897 Tím SQL Server je k dispozícii prírastkový model údržby, ktorý bude poskytovať rýchle opravy nahlásených problémov

Ďalšie informácie o schéme pomenovania pre aktualizácie SQL Server nájdete v nasledujúcom článku databázy Microsoft Knowledge Base:

822499 Nová schéma pomenovania pre balíky aktualizácií softvéru Microsoft SQL Server Ďalšie informácie o terminológii aktualizácií softvéru získate po kliknutí na nasledujúce číslo článku publikovaného v databáze Microsoft Knowledge Base:

824684 Popis štandardnej terminológie, ktorá sa používa na popis aktualizácií softvéru spoločnosti Microsoft