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:
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ť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ť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