Microsoft SQL Server 2012 Service Pack 1-Fixes werden als eine herunterladbare Datei verteilt. Da die Fixes kumulativ sind, enthält jedes neue Release alle Hotfixes und alle Sicherheitsfixes, die im vorherigen SQL Server 2012 Service Pack 1-Fixrelease enthalten waren.
Problembeschreibung
Wenn Sie eine Transact-SQL-Anweisung in SQL Server 2012 ausführen, erhalten Sie die folgende Fehlermeldung:
Falsche Syntax in der Nähe von 'begi'.
Dieses Problem tritt auf, wenn die folgenden Bedingungen erfüllt sind:
-
Die -Anweisung enthält eine IF-Bedingung.
-
Die IF-Bedingung enthält keine BEGIN- und END-Anweisungen.
-
Auf die If-Bedingung folgt ein BEGIN TRY-Block.
-
Der IF-Block wird neu kompiliert, wenn Sie die Abfrage ausführen.
Lösung
Informationen zum kumulativen Update
Kumulatives Update 4 für SQL Server 2012 SP1
Die Behebung dieses Problems wurde zuerst im kumulativen Update 4 veröffentlicht. Weitere Informationen zum Abrufen dieses kumulativen Updatepakets für SQL Server 2012 SP1 finden Sie in den folgenden Artikeln der Microsoft Knowledge Base:
2833645 Kumulatives Update 4 für SQL Server 2012 SP1Note Da die Builds kumulativ sind, enthält jedes neue Fixrelease alle Hotfixes und alle Sicherheitsfixes, die im vorherigen SQL Server 2012 SP1-Fixrelease enthalten waren. Es wird empfohlen, dass Sie das neueste Updaterelease anwenden, das diesen Hotfix enthält. Weitere Informationen finden Sie, indem Sie auf die folgende Artikelnummer klicken, um zum Artikel in der Microsoft Knowledge Base zu wechseln:
2772858 Die SQL Server 2012-Builds, die nach SQL Server 2012 Service Pack 1 veröffentlicht wurden
Status
Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel genannten Microsoft-Produkten handelt.
Weitere Informationen
Um dieses Problem zu reproduzieren, führen Sie die folgenden Transact-SQL-Anweisungen in SQL Server 2012 aus: DECLARE @i INTIF object_id('tempdb.). #temptable') IS NOT NULLDROP TABLE #temptableCREATE TABLE #temptable (id INT)INSERT INTO #temptable VALUES (1),(2),(3);IF year(getdate())=2012 SELECT @i=(SELECT COUNT(*) AS nr FROM #temptable);BEGIN TRYSELECT 'message'END TRYBEGIN CATCHSELECT ERROR_MESSAGE()END CATCH
Problemumgehung
Um dieses Problem zu umgehen, fügen Sie begin- und END-Anweisungen zur IF-Bedingung hinzu.
Informationsquellen
Weitere Informationen zum inkrementellen Wartungsmodell für SQL Server finden Sie im folgenden Artikel der Microsoft Knowledge Base:
935897 Ein inkrementelles Wartungsmodell ist vom SQL Server-Team verfügbar, um Hotfixes für gemeldete Probleme bereitzustellen. Weitere Informationen zum Benennungsschema für SQL Server Updates finden Sie in der Microsoft Knowledge Base:
822499 Benennungsschema für Microsoft SQL Server Softwareupdatepakete Weitere Informationen zur Terminologie von Softwareupdates finden Sie in der Microsoft Knowledge Base im folgenden Artikel:
824684 Erläuterung von Standardbegriffen bei Microsoft-Softwareupdates