As correções do Microsoft SQL Server 2012 Service Pack 1 são distribuídas como um ficheiro transferível. Tendo em conta que as correções são cumulativas, cada nova versão contém todas as correções e todas as correções de segurança incluídas na versão de correção do SQL Server 2012 Service Pack 1 anterior.
Sintomas
Quando executa uma instrução Transact-SQL no SQL Server 2012, recebe a seguinte mensagem de erro:
Sintaxe incorreta perto de "begi".
Este problema ocorre quando as seguintes condições são verdadeiras:
-
A instrução contém uma condição SE.
-
A condição SE não contém instruções BEGIN e END.
-
A condição SE é seguida por um bloco BEGIN TRY.
-
O bloco SE é recompilado quando executa a consulta.
Resolução
Informações de atualização cumulativa
Atualização Cumulativa 4 para SQL Server 2012 SP1
A correção para este problema foi lançada pela primeira vez na Atualização Cumulativa 4. Para obter mais informações sobre como obter este pacote de atualização cumulativa para o SQL Server 2012 SP1, clique no seguinte número de artigo para aceder ao artigo na Base de Dados de Conhecimento Microsoft:
2833645 Atualização cumulativa 4 para SQL Server 2012 SP1Note Dado que as compilações são cumulativas, cada nova versão de correção contém todas as correções e todas as correções de segurança que foram incluídas na versão de correção do SQL Server 2012 SP1 anterior. Recomendamos que considere aplicar a versão de correção mais recente que contém esta correção. Para obter mais informações, clique no seguinte número do artigo para aceder ao artigo na Base de Dados de Conhecimento Microsoft:
2772858 As compilações SQL Server 2012 que foram lançadas após SQL Server service pack 1 de 2012 foram lançadas
Estado
A Microsoft confirmou que este problema ocorre nos produtos da Microsoft listados na secção "Aplica-se a".
Mais Informações
Para reproduzir este problema, execute as seguintes instruções Transact-SQL no SQL Server 2012: DECLARE @i INTIF object_id('tempdb.). #temptable') IS NOT NULLDROP TABLE #temptableCREATE TABLE #temptable (ID INT)INSERT INTO #temptable VALUES (1),(2),(3);SE year(getdate())=2012 SELECT @i=(SELECT COUNT(*) AS nr FROM #temptable);BEGIN TRYSELECT 'message'END TRYBEGIN CATCHSELECT ERROR_MESSAGE()END CATCH
Solução
Para contornar este problema, adicione instruções BEGIN e END à condição SE.
Referências
Para obter mais informações sobre o Modelo de Manutenção Incremental para SQL Server, clique no seguinte número de artigo para aceder ao artigo na Base de Dados de Conhecimento Microsoft:
935897 Está disponível um Modelo de Manutenção Incremental da equipa de SQL Server para fornecer correções para problemas reportados Para obter mais informações sobre o esquema de nomenclatura para atualizações de SQL Server, clique no seguinte número de artigo para aceder ao artigo na Base de Dados de Conhecimento Microsoft:
822499 Esquema de nomenclatura para pacotes de atualização de software do Microsoft SQL Server Para obter mais informações sobre a terminologia de atualização de software, clique no seguinte número de artigo para aceder ao artigo na Base de Dados de Conhecimento Microsoft:
824684 Descrição da terminologia padrão utilizada para descrever as atualizações de software da Microsoft