KB2380435 — POPRAWKA: Plan zapytania procedury składowanej nie jest buforowany, jeśli procedura składowana używa zmiennej BLOB, a zmienna jest używana w funkcji ciągu w programie Microsoft SQL Server 2008 lub w programie Microsoft SQL Server 2008 R2

Dotyczy
SQL Server 2008 SQL Server 2008 R2

Firma Microsoft dystrybuuje poprawki dla programów Microsoft SQL Server 2008 i Microsoft SQL Server 2008 R2 jako jeden plik do pobrania. Ponieważ poprawki są zbiorcze, każda nowa wersja zawiera wszystkie poprawki i poprawki zabezpieczeń zawarte w poprzedniej wersji poprawki dla programu SQL Server 2008 lub SQL Server 2008 R2.

Objawy

Rozważmy następujący scenariusz:

  • Procedurę składowaną tworzy się w programie Microsoft SQL Server 2008 lub Microsoft SQL Server 2008 R2.
  • Procedura składowana używa zmiennej BLOB (binary large object).
  • Zmienna BLOB jest używana w funkcji ciągu.
  • Wykonywano procedurę składowaną.

W tym scenariuszu plan kwerendy dla procedury składowanej nie jest buforowany.

Rozwiązanie

Informacje o aktualizacji zbiorczej

SQL Server 2008 z dodatkiem Service Pack 1

Poprawkę rozwiązującą ten problem opublikowano po raz pierwszy w aktualizacji zbiorczej 10 dla programu SQL Server 2008 z dodatkiem Service Pack 1. Aby uzyskać więcej informacji dotyczących tego pakietu aktualizacji skumulowanych, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Baza wiedzy Microsoft Knowledge Base:

2279604 Pakiet aktualizacji zbiorczej 10 dla dodatku Service Pack 1 SQL Server 2008Uwaga Ponieważ te kompilacje mają charakter zbiorczy, każda nowa wersja poprawki zawiera wszystkie poprawki i poprawki zabezpieczeń z poprzednich wersji poprawek SQL Server 2008. Firma Microsoft zaleca rozważenie zastosowania najnowszej wersji poprawki zawierającej tę poprawkę. Aby uzyskać więcej informacji, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Baza wiedzy Microsoft Knowledge Base:

970365 Kompilacje SQL Server 2008 wydane po wydaniu dodatku Service Pack 1 SQL Server 2008 Poprawki Microsoft SQL Server 2008 są tworzone dla określonych SQL Server dodatków Service Pack. Należy zastosować poprawkę dodatku Service Pack 1 dla programu SQL Server 2008 do instalacji dodatku Service Pack 1 dla programu SQL Server 2008. Domyślnie każda poprawka dostępna w dodatku Service Pack dla programu SQL Server jest uwzględniona w następnym dodatku Service Pack dla programu SQL Server.

Dodatek Service Pack 2 dla programu SQL Server 2008

Poprawkę rozwiązującą ten problem opublikowano po raz pierwszy w aktualizacji zbiorczej 1 dla dodatku Service Pack 2 dla programu SQL Server 2008. Aby uzyskać więcej informacji dotyczących tego pakietu aktualizacji skumulowanych, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Baza wiedzy Microsoft Knowledge Base:

2289254 Aktualizacja zbiorcza 1 dla dodatku Service Pack 2 SQL Server 2008Uwaga Ponieważ te kompilacje mają charakter zbiorczy, każda nowa poprawka zawiera wszystkie poprawki i poprawki zabezpieczeń z poprzednich wersji poprawek SQL Server 2008. Zalecamy rozważenie zastosowania najnowszej wersji poprawki zawierającej tę poprawkę. Aby uzyskać więcej informacji, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Baza wiedzy Microsoft Knowledge Base:

2402659 Kompilacje SQL Server 2008 wydane po wydaniu dodatku Service Pack 2 SQL Server 2008

SQL Server 2008 R2

Poprawka rozwiązująca ten problem została po raz pierwszy opublikowana w aktualizacji zbiorczej 4. Aby uzyskać więcej informacji dotyczących sposobu uzyskania tego pakietu aktualizacji zbiorczej dla programu SQL Server 2008 R2, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Baza wiedzy Microsoft Knowledge Base:

2345451 Pakiet aktualizacji zbiorczej 4 dla systemu SQL Server 2008 R2 Uwaga Ponieważ te kompilacje są zbiorcze, każda nowa wersja poprawki zawiera wszystkie poprawki i poprawki zabezpieczeń z poprzednich wersji poprawek SQL Server 2008 R2. Zalecamy rozważenie zastosowania najnowszej wersji poprawki zawierającej tę poprawkę. Aby uzyskać więcej informacji, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Baza wiedzy Microsoft Knowledge Base:

981356 Kompilacje SQL Server 2008 R2 wydane po wydaniu SQL Server 2008 R2

Stan

Firma Microsoft potwierdziła, że jest to problem dotyczący produktów firmy Microsoft wymienionych w sekcji „Dotyczy”.

Więcej informacji

Aby odtworzyć ten problem, wykonaj następujące czynności:

  1. Uruchom poniższy kod, aby utworzyć dwie procedury składowane ("p_test1" i "p_test2"). "P_test1" używa zmiennej BLOB, a "p_test2" używa zmiennej nvarchar(100).use tempdb
    przejdź
    Jeśli OBJECT_ID('p_test1') nie jest wartością null, upuść procedurę p_test1
    Jeśli OBJECT_ID('p_test2') nie jest wartością null, upuść procedurę p_test2
    przejdź
    Tworzenie p_test1 proceduralnej
    @s nvarchar(max)
    Jak
    rozpoczynać
    select * from sys.objects
    where name = UPPER(@s)
    koniec
    przejdź
    Tworzenie p_test2 procedur
    @s nvarchar(100)
    Jak
    rozpoczynać
    select * from sys.objects
    where name = UPPER(@s)
    koniec
    przejdź

  2. Uruchom następujący kod, aby wyczyścić pamięć podręczną procedur i wykonać dwie procedury składowane:dbcc freeproccache
    przejdź
    exec p_test1 N'abc'
    exec p_test2 N'abc'
    przejdź

  3. Uruchom następujący kod, aby sprawdzić plan buforowany: select object_name(CONVERT(int;a.value)), cp.*
    z sys.dm_exec_cached_plans cp
    zastosuj krzyżowo sys.dm_exec_plan_attributes(cp.plan_handle) a
    gdzie cp.objtype = 'Proc'
    and a.attribute = 'objectID'

Uwaga Jeśli istnieje wiele jednoczesnych wykonań tego rodzaju procedury składowanej w wystąpieniu programu Microsoft SQL Server 2008 lub Microsoft SQL Server 2008 R2, może wystąpić blokowanie spowodowane blokadami kompilacji w wystąpieniu.

Aby uzyskać więcej informacji na temat blokowania programu SQL Server powodowanego przez blokady kompilacji, zobacz następujący artykuł z bazy wiedzy Baza wiedzy Microsoft Knowledge Base:

263889 Opis blokowania SQL Server spowodowanego przez blokady kompilacji

Źródła informacji

Aby uzyskać więcej informacji o funkcjach tekstowych (Transact-SQL), odwiedź następującą witrynę firmy Microsoft w sieci Web:

Funkcje tekstowe (Transact-SQL) Aby uzyskać więcej informacji dotyczących modelu obsługi przyrostowej dla programu SQL Server, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Baza wiedzy Microsoft Knowledge Base:

935897 Zespół SQL Server udostępnia model obsługi przyrostowej w celu dostarczania poprawek dla zgłoszonych problemów

Aby uzyskać więcej informacji dotyczących schematu nazewnictwa aktualizacji programu SQL Server, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Baza wiedzy Microsoft Knowledge Base:

822499 Nowy schemat nazewnictwa pakietów aktualizacji oprogramowania firmy Microsoft SQL Server Aby uzyskać więcej informacji dotyczących terminologii związanej z aktualizacjami oprogramowania, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Baza wiedzy Microsoft Knowledge Base:

824684 Opis standardowej terminologii używanej do opisywania aktualizacji oprogramowania firmy Microsoft