Исправления Microsoft SQL Server 2012 с пакетом обновления 1 распространяются в виде одного скачиваемого файла. Учитывая, что исправления являются накопительными, каждый новый выпуск содержит все исправления и все исправления для системы безопасности, которые были включены в предыдущий выпуск SQL Server 2012 с пакетом обновления 1 (SP1).
Проблемы
При выполнении инструкции Transact-SQL в SQL Server 2012 появляется следующее сообщение об ошибке:
Неправильный синтаксис рядом с begi.
Эта проблема возникает при выполнении следующих условий:
-
Инструкция содержит условие IF.
-
Условие IF не содержит инструкции BEGIN и END.
-
За условием IF следует блок BEGIN TRY.
-
Блок IF перекомпилируется при выполнении запроса.
Решение
Сведения о накопительном пакете обновления
Накопительный пакет обновления 4 для SQL Server 2012 с пакетом обновления 1 (SP1)
Исправление этой проблемы было впервые выпущено в накопительном пакете обновления 4. Дополнительные сведения о том, как получить этот накопительный пакет обновления для SQL Server 2012 с пакетом обновления 1 (SP1), щелкните следующий номер статьи, чтобы перейти к статье в базе знаний Майкрософт:
2833645 Накопительный пакет обновления 4 для SQL Server 2012 с пакетом обновления 1 (SP1)Примечая, что сборки являются накопительными, каждый новый выпуск исправления содержит все исправления и все исправления безопасности, которые были включены в предыдущий выпуск исправления SQL Server 2012 с пакетом обновления 1 (SP1). Рекомендуется применить последний выпуск исправления, содержащий это исправление. Дополнительные сведения см. в указанной ниже статье базы знаний Майкрософт:
2772858 Сборки SQL Server 2012 года, выпущенные после выпуска SQL Server 2012 с пакетом обновления 1 (SP1)
Статус
Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе "Применяется к".
Дополнительная информация
Чтобы воспроизвести эту проблему, выполните следующие инструкции Transact-SQL в SQL Server 2012: DECLARE @i INTIF object_id('tempdb.. #temptable') НЕ ЯВЛЯЕТСЯ NULLDROP TABLE #temptableCREATE TABLE #temptable (id INT)INSERT INTO #temptable ЗНАЧЕНИЯ (1),(2),(3);IF year(getdate())=2012 SELECT @i=(SELECT COUNT(*) AS nr FROM #temptable);BEGIN TRY SELECT'message'END TRYBEGIN CATCHSELECT ERROR_MESSAGE()END CATCH
Обходное решение
Чтобы обойти эту проблему, добавьте инструкции BEGIN и END в условие IF.
Ссылки
Дополнительные сведения о модели добавочного обслуживания для SQL Server щелкните следующий номер статьи, чтобы перейти к статье базы знаний Майкрософт:
935897 Модель добавочного обслуживания доступна в команде SQL Server для доставки исправлений для обнаруженных проблем. Дополнительные сведения о схеме именования для обновлений SQL Server щелкните следующий номер статьи, чтобы перейти к статье базы знаний Майкрософт:
822499 Схема именования пакетов обновлений программного обеспечения Microsoft SQL Server. Дополнительные сведения о терминологии обновлений программного обеспечения щелкните следующий номер статьи, чтобы перейти к статье в базе знаний Майкрософт:
824684 Стандартные термины, используемые при описании обновлений программных продуктов Майкрософт