SSDT の「スクリプトの生成」機能を使用して、データベース スクリプトを作成しています。ただし、スクリプトを実行すると、SSMS によると、生成されたスクリプトには構文エラーがあります。エラーのあるコードは次のとおりです。
IF EXISTS (SELECT 1
FROM [master].[dbo].[sysdatabases]
WHERE [name] = N'$(DatabaseName)')
BEGIN
ALTER DATABASE [$(DatabaseName)]
SET AUTO_CREATE_STATISTICS ON(INCREMENTAL = OFF),
MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = OFF,
DELAYED_DURABILITY = DISABLED
WITH ROLLBACK IMMEDIATE;
END
エラーは次のとおりです。
メッセージ 102、レベル 15、状態 1、行 208 'INCREMENTAL' 付近の構文が正しくありません。メッセージ 319、レベル 15、状態 1、行 211 キーワード「with」付近の構文が正しくありません。このステートメントが共通テーブル式、xmlnamespaces 句、または変更追跡コンテキスト句である場合、前のステートメントはセミコロンで終了する必要があります。メッセージ 102、レベル 15、状態 1、行 211 'IMMEDIATE' 付近の構文が正しくありません。
私が知る限り、生成される構文は SQL Server 2012 CTP1 で廃止されました。
SSDT バージョン 14.0.609.18 で Visual Studio バージョン 14.0.25431.01 Update 3 を使用しています。このスクリプトを SQL Server 11.0.6020 に対して実行しています。
Visual Studio からパブリッシュしたり、Visual Studio からスキーマ比較を行ったり、SSMS または VS で DACPAC アップグレードを介してこのスキーマを適用したり、DacFx を介してビルドの DACPAC をエラーなしで適用したりできることに注意してください。生のスクリプトを実行するときにのみ、このエラーが発生します。
問題のあるコードを削除すると、期待どおりに機能します。特定のケースのスクリプトが必要です。SSDT が不適切な構文を作成している理由を理解しようとしています。展開前に生成されたスクリプトに対して行う必要がある手動編集のチェックリストを作成する必要はありません。
誰にもアイデアはありますか?ありがとうございました!