web-dev-qa-db-ja.com

SqlPackage.exeがスキーマバインディングを使用してインデックス付きビューを不必要に削除および再作成する

現在、SqlPackage.exeは、データベーススキーマの変更を展開するためにBitBucketと組み合わせて使用​​されています。

最近、アプリケーションにとって重要な3つのソーステーブルに基づいて、かなり大きなインデックス付きビューが作成されました。ビューにクラスター化インデックスを作成するプロセスとそれに伴うダウンタイムは、完了するまでに約1時間かかりました。

最近、インデックス付きビューのソーステーブルの1つに列を追加する必要がありました。ビューにはスキーマバインディングがありますが、新しい列はビューの定義で使用されていないため(これは問題です)、問題にはなりません。 SqlPackageによって生成されたスクリプトを見ると、完全に不要ですが、スキーマバインディングに対処するためにインデックス付きビューを削除することを選択しています。 SqlPackageが依存関係をチェックできないため、予防策からビューを削除したように思えます。

ローカルマシン(SQL Server 2017 Devエディション)で同様の状況をシミュレートする場合、DacPacsを比較すると、常にビューも削除および再作成されます。

さて、質問:SqlPackageがビューを削除しないようにするための回避策や方法を誰かが知っていますか?私はすべてのプロパティをチェックしましたが、そこには実行可能なオプションがないようです。

2
Thomas Costers

SqlPackage.exeは、物事を行うための難しい方法を選択することがよくあります。
このような問題には、次のプロセスがありました:
1。開発環境で変更スクリプトを生成し、あなたが持っているような長いステップを探してください。
2。必要な変更を実装するスクリプトを手動で作成します(すべての変更ではないため、この場合はビューの更新になります)。 SQLPackageの前にこのスクリプトを実行します。
3。 SqlPackageを再度実行します。このビューは変更を必要とせず、他の変更のみを実装することに注意してください。

1
Piotr