Microsoft stellt Updates für Microsoft SQL Server 2008 und Microsoft SQL Server 2008 R2 als downloadbare Dateien zur Verfügung. Da die kumulativ sind, enthält jede neue Version alle Hotfixes und alle Sicherheitsupdates, die in früheren SQL Server 2008 oder SQL Server 2008 R2 enthalten waren.
Problembeschreibung
Stellen Sie sich folgendes Szenario vor:
-
Sie erstellen eine gespeicherte Prozedur in Microsoft SQL Server 2008 oder Microsoft SQL Server 2008 R2.
-
Die gespeicherte Prozedur verwendet eine Variable großes Binärobjekt (BLOB).
-
BLOB-Variable wird in einer Zeichenfolge verwendet.
-
Die gespeicherte Prozedur ausführen.
In diesem Szenario wird der Abfrageplan für die gespeicherte Prozedur nicht zwischengespeichert.
Lösung
Informationen zum kumulativen Update
SQL Server 2008 Servicepack 1
Die Fehlerbehebung für dieses Problem wurde zuerst im Kumulatives Update 10 für SQL Server 2008 Service Pack 1 veröffentlicht. Für weitere Informationen zu diesem kumulativen Update-Paket, klicken Sie auf die folgende Artikelnummer, um den Artikel in der Microsoft Knowledge Base anzuzeigen:
2279604 Kumulatives Updatepaket 10 für SQL Server 2008 Service Pack 1Hinweis Da diese Builds kumulativ sind, enthält jede neue Veröffentlichung alle Hotfixes und alle die Sicherheitsupdates, die in den vorherigen SQL Server 2008 Fix-Veröffentlichung enthalten waren. Microsoft empfiehlt, dass Sie prüfen die neueste Update-Version, die diesen Hotfix enthält. Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:
970365 SQL Server 2008 builds, die nach der Freigabe von SQL Server 2008 Service Pack 1 Microsoft SQL Server 2008-Hotfixes sind für bestimmte SQL Server Servicepacks erstellt. Sie müssen SQL Server 2008 Service Pack 1-Hotfix eine Installation von SQL Server 2008 Service Pack 1 anwenden. Standardmäßig ist jeder Hotfix, der in einem SQL Server Servicepack bereitgestellt wird, in einem nächsten Servicepack für SQL Server enthalten.
SQL Server 2008 Servicepack 2
Die Fehlerbehebung für dieses Problem wurde zuerst im kumulativen Update 1 für SQL Server 2008 Service Pack 2 veröffentlicht. Für weitere Informationen zu diesem kumulativen Update-Paket, klicken Sie auf die folgende Artikelnummer, um den Artikel in der Microsoft Knowledge Base anzuzeigen:
2289254 Kumulative Update 1 für SQL Server 2008 Service Pack 2Hinweis Da diese Builds kumulativ sind, enthält jede neue Veröffentlichung alle Hotfixes und alle die Sicherheitsupdates, die in den vorherigen SQL Server 2008 Fix-Veröffentlichung enthalten waren. Wir empfehlen Sie prüfen die neueste Update-Version, die diesen Hotfix enthält. Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:
2402659 SQL Server 2008 basiert, die nach der Freigabe von SQL Server 2008 Service Pack 2 veröffentlicht wurden
SQL Server 2008 R2
Die Fehlerbehebung für dieses Problem wurde erstmals im kumulativen Update 4 veröffentlicht. Weitere Informationen zu diesem kumulativen Updatepaket für SQL Server 2008 R2 finden Sie im folgenden Artikel der Microsoft Knowledge Base:
2345451 Kumulatives Updatepaket 4 für SQL Server 2008 R2 Hinweis Da diese Builds kumulativ sind, enthält jede neue Version alle Hotfixes und alle Sicherheitsupdates, die in früheren SQL Server 2008 R2 enthalten waren. Wir empfehlen Sie prüfen die neueste Update-Version, die diesen Hotfix enthält. Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:
981356 SQL Server 2008 R2 builds, die nach der Freigabe von SQL Server 2008 R2
Status
Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel genannten Microsoft-Produkten handelt.
Weitere Informationen
Gehen Sie folgendermaßen vor, um dieses Problem zu reproduzieren:
-
Führen Sie den folgenden Code Prozeduren erstellen zwei ("p_test1" und "p_test2"). "P_test1" verwendet eine BLOB-Variable "p_test2" verwendet eine Variable vom Datentyp 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
-
Führen Sie den folgenden Code den Prozedur-Cache deaktivieren und die beiden Ausführen gespeicherter Prozeduren:dbcc freeproccachegoexec p_test1 N'abc'exec p_test2 N'abc'go
-
Führen Sie den folgenden Code zum Überprüfen des zwischengespeicherten Plans: 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'
Hinweis Sind viele gleichzeitige Ausführung dieser Art auf einer Microsoft SQL Server 2008 oder eine Instanz von Microsoft SQL Server 2008 R2, möglicherweise blockiert, die durch Kompilieren Sperren in der Instanz verursacht. Weitere Informationen über die Beschreibung des SQL Server-Blockierung verursacht durch Kompilieren Sperren finden Sie im folgenden Artikel der Microsoft Knowledge Base:
263889 Beschreibung des SQL Server-Blockierung verursacht durch Kompilieren Sperren
Informationsquellen
Weitere Informationen zu Funktionen (Transact-SQL) finden Sie auf folgender Microsoft-Website:
String-Funktionen (Transact-SQL)Weitere Informationen zum inkrementellen Dienstmodell für SQL Server klicken Sie auf die folgenden Artikelnummer der Microsoft Knowledge Base:
935897 erläutert wird Steht ein inkrementelles Dienstmodell vom SQL Server-Team zu Hotfixes für gemeldete ProblemeWeitere Informationen zum Benennungsschema für SQL Server-Updates klicken Sie auf die folgenden Artikelnummer der Microsoft Knowledge Base:
822499Neues Benennungsschema für Softwareupdatepakete für Microsoft SQL ServerUm weitere Informationen zur Terminologie für Softwareupdates zu erhalten, klicken Sie auf die folgende Artikelnummer, um den Artikel der Microsoft Knowledge Base anzuzeigen:
824684 Beschreibung der Standardterminologie, die zum Beschreiben von Microsoft-Softwareupdates verwendet wird