Poprawka: Plan kwerend dla procedury przechowywanej nie jest buforowana, jeśli procedura składowana używa zmiennej obiektu BLOB, a zmienna jest używana w funkcji ciąg w Microsoft SQL Server 2008 lub Microsoft SQL Server 2008 R2

Dotyczy: SQL Server 2008SQL Server 2008 R2

Firma Microsoft rozpowszechnia Microsoft SQL Server 2008 i Microsoft SQL Server 2008 R2 ustala się jako jeden plik do pobrania. Ponieważ poprawki są zbiorcze, każde nowe wydanie zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń, które zostały dołączone do poprzedniego programu SQL Server 2008 lub SQL Server 2008 R2 Release.

Symptomy


Rozpatrzmy następujący scenariusz:
  • Można utworzyć procedurę przechowywaną w Microsoft SQL Server 2008 lub Microsoft SQL Server 2008 R2.
  • Procedura składowana używa zmiennej dużego obiektu binarnego (BLOB).
  • Zmienna obiektu BLOB jest używana funkcja ciąg.
  • Wykonanie procedury przechowywanej.
W tym scenariuszu nie jest buforowany plan kwerend dla procedury przechowywanej.

Rozwiązanie


Informacje dotyczące zbiorczej aktualizacji

Dodatek Service Pack 1 dla programu SQL Server 2008

Poprawkę dotyczącą tego problemu został wydany w 10 aktualizacja zbiorcza dla dodatku Service Pack 1 dla programu SQL Server 2008. Aby uzyskać więcej informacji na temat tego pakietu aktualizacji zbiorczej kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
2279604 Pakiet aktualizacji zbiorczej 10 dla dodatku Service Pack 1 dla programu SQL Server 2008
Uwaga Ponieważ są zbiorcze, każde nowe wydanie zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń, które zostały dołączone do poprzedniego programu SQL Server 2008 Release. Firma Microsoft zaleca, aby rozważyć zastosowanie najnowszej wersji poprawki, zawierający tę poprawkę. Aby uzyskać więcej informacji, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
970365 SQL Server 2008 buduje wydane po wydaniu dodatku Service Pack 1 dla programu SQL Server 2008
Microsoft SQL Server 2008 poprawki są tworzone dla określonych dodatków service Pack dla programu SQL Server. Do instalacji programu SQL Server 2008 z dodatkiem Service Pack 1, należy zastosować poprawkę dodatku Service Pack 1 dla programu SQL Server 2008. Domyślnie wszystkie poprawki, która jest dostępna w dodatku service pack dla programu SQL Server znajduje się w następnym dodatku service pack dla programu SQL Server.

Dodatek Service Pack 2 dla programu SQL Server 2008

Poprawkę dotyczącą tego problemu został wydany w zbiorczej aktualizacji 1 dla programu SQL Server 2008 Service Pack 2. Aby uzyskać więcej informacji na temat tego pakietu aktualizacji zbiorczej kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
2289254 Zbiorcza aktualizacja 1 dla dodatku Service Pack 2 dla programu SQL Server 2008
Uwaga Ponieważ są zbiorcze, każde nowe wydanie zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń, które zostały dołączone do poprzedniego programu SQL Server 2008 Release. Firma Microsoft zaleca, aby rozważyć zastosowanie najnowszej wersji poprawki, zawierający tę poprawkę. Aby uzyskać więcej informacji, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
2402659 SQL Server 2008 buduje wydane po wydaniu dodatku Service Pack 2 dla programu SQL Server 2008

Program SQL Server 2008 R2

Poprawkę dotyczącą tego problemu najpierw została wydana w zbiorczej aktualizacji 4. Aby uzyskać więcej informacji dotyczących sposobu uzyskiwania 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 Microsoft Knowledge Base:
2345451 Skumulowany pakiet aktualizacji 4 dla programu SQL Server 2008 R2
Uwaga Ponieważ są zbiorcze, każde nowe wydanie zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń, które zostały dołączone do poprzedniego programu SQL Server 2008 R2 Release. Firma Microsoft zaleca, aby rozważyć zastosowanie najnowszej wersji poprawki, zawierający tę poprawkę. Aby uzyskać więcej informacji, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
981356 SQL Server 2008 R2 buduje wydane po wydaniu programu SQL Server 2008 R2

Stan


Firma Microsoft potwierdziła, że jest to problem występujący w produktach firmy Microsoft wymienionych w sekcji „Dotyczy”.

Więcej informacji


Aby odtworzyć ten problem, wykonaj następujące kroki:
  1. Uruchom poniższy kod, aby utworzyć dwie procedury przechowywane ("p_test1" i "p_test2"). Użyto zmiennej obiektu BLOB, "P_test1" i "p_test2" używa zmiennej nvarchar(100).
    use tempdbgoif OBJECT_ID('p_test1') is not null drop proc p_test1if OBJECT_ID('p_test2') is not null drop proc p_test2gocreate proc p_test1@s nvarchar(max)asbeginselect * from sys.objects where name = UPPER(@s)endgocreate proc p_test2@s nvarchar(100)asbeginselect * from sys.objects where name = UPPER(@s)endgo 
  2. Uruchom poniższy kod, aby wyczyścić pamięć podręczna procedury i wykonać dwie procedury przechowywane:
    dbcc freeproccachegoexec p_test1 N'abc'exec p_test2 N'abc'go 
  3. Uruchom poniższy kod, aby sprawdzić buforowanego planu:
    select object_name(CONVERT(int, a.value)), cp.*from sys.dm_exec_cached_plans cpcross apply sys.dm_exec_plan_attributes(cp.plan_handle) awhere cp.objtype = 'Proc'and a.attribute = 'objectid' 
Uwaga: W przypadku wielu jednoczesnych egzekucji tego rodzaju procedura przechowywana programu Microsoft SQL Server 2008 lub wystąpienie programu Microsoft SQL Server 2008 R2, mogą wystąpić blokowanie powodowanego przez blokady compile na wystąpienie. Aby uzyskać więcej informacji dotyczących opisu programów SQL Server blokuje spowodowane przez blokady compile zobacz następujący artykuł z bazy wiedzy Microsoft Knowledge Base:
263889 Opis programu SQL Server blokuje spowodowane blokadami kompilacji

Informacje


Aby uzyskać więcej informacji na temat funkcji łańcuchowych (Transact-SQL) odwiedź następujące witryny firmy Microsoft:Aby uzyskać więcej informacji o przyrostowych modelu obsługi programu SQL Server kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
935897 Przyrostowe modelu obsługi jest dostępne z zespołu programu SQL Server do dostarczania poprawki dla problemów zgłoszonych
Aby uzyskać więcej informacji na temat schematu nazewnictwa dla aktualizacji programu SQL Server kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
822499Nowy schemat nazewnictwa dla pakietów aktualizacji oprogramowania Microsoft SQL Server
Aby uzyskać więcej informacji dotyczących terminologii aktualizacji oprogramowania, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
824684 Opis standardowej terminologii używanej do opisywania aktualizacji oprogramowania firmy Microsoft