Microsoft SQL Server 2012 Service Pack 1 の修正プログラムは、ダウンロード可能な 1 つのファイルとして配布されます。 修正プログラムが累積的である場合、新しい各リリースには、すべての修正プログラムと、以前のSQL Server 2012 Service Pack 1 修正プログラム リリースに含まれていたすべてのセキュリティ修正プログラムが含まれています。
現象
SQL Server 2012 で Transact-SQL ステートメントを実行すると、次のエラー メッセージが表示されます。
'begi' の近くの構文が正しくありません。
この問題は、次の条件に該当する場合に発生します。
-
ステートメントには IF 条件が含まれています。
-
IF 条件に BEGIN ステートメントと END ステートメントが含まれていません。
-
IF 条件の後に BEGIN TRY ブロックが続きます。
-
クエリを実行すると、IF ブロックが再コンパイルされます。
解決方法
累積的な更新プログラムの情報
SQL Server 2012 SP1 の累積的な更新プログラム 4
この問題の修正プログラムは、累積的な更新プログラム 4 で最初にリリースされました。 SQL Server 2012 SP1 のこの累積的な更新プログラム パッケージを取得する方法の詳細については、次の記事番号をクリックして、Microsoft サポート技術情報の記事に移動します。
2833645 SQL Server 2012 SP1Note の累積的な更新プログラム 4 ビルドが累積的な場合、新しい修正プログラムの各リリースには、以前の SQL Server 2012 SP1 修正プログラム リリースに含まれていたすべての修正プログラムとすべてのセキュリティ修正プログラムが含まれています。 この修正プログラムを含む最新の修正プログラム リリースを適用することを検討することをお勧めします。 詳細については、以下のサポート技術情報番号をクリックしてください。
2772858 SQL Server 2012 Service Pack 1 のリリース後にリリースされた SQL Server 2012 ビルド
状態
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。
詳細情報
この問題を再現するには、SQL Server 2012 で次の Transact-SQL ステートメントを実行します。DECLARE @i INTIF object_id('tempdb..#temptable') は NULL ではありませんDROP TABLE #temptable CREATE 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
回避策
この問題を回避するには、BEGIN ステートメントと END ステートメントを IF 条件に追加します。
関連情報
SQL Serverの増分サービス モデルの詳細については、次の記事番号をクリックして、Microsoft サポート技術情報の記事に移動してください。
935897 増分サービス モデルは、報告された問題の修正プログラムを提供するために、SQL Server チームから入手できます。SQL Server更新プログラムの名前付けスキーマの詳細については、Microsoft サポート技術情報の記事に移動するには、次の記事番号をクリックしてください。
822499 Microsoft SQL Server ソフトウェア更新プログラム パッケージの名前付けスキーマ ソフトウェア更新プログラムの用語の詳細については、次の記事番号をクリックして、Microsoft サポート技術情報の記事に移動してください。
824684 マイクロソフトのソフトウェアの更新で使用される一般的な用語の説明