私はデータベース変更のためにDACPACに切り替えることを検討していますが、より複雑なデータベース更新については何をすべきかについては少し迷っています。私が何を意味しているかを説明するために、同じ問題を抱える簡単な例を使ってみましょう。複雑な変更を加えたDACPACパッケージ
私は現在ライブのCustomerテーブルを持っており、CustomerからCustomerTypeへの外部キーを持つ新しいCustomerTypeテーブルを追加したいとします。 Customerの新しい列は必須(NULL可能ではありません)である必要がありますが、デフォルト値を持つべきではありません。
アップグレード時に既存の顧客の初期タイプを設定するために、任意の数式を使用したいと考えています。私はDACPACを使ってこれをどのように達成しますか?
DACPACは新しい列があることだけを認識し、Customerテーブルに追加しようとしますが、これは必須であるため失敗します。ヌル値を許可するので、デフォルト値を設定することは望ましくありません。
DACPACはすべての状態から最新の状態にアップグレードする必要があるため、この作業を行うために設定する必要のある設定やプレ/ポストスクリプトはありません。
様々な検索が有用な結果が期待はずれの欠如を生産している:(
私は助けることができ、ここで誰かがあります願っています。事前に感謝。
さて、私はDACPACを意図したように「最終状態」として使用できるようにしたいと考えていますが、状態間の移行をある程度制御しています。列のNULL可能性を変更するポストデプロイメントスクリプトを使用すると、DACPACと完全に最新のデータベースとの間の比較によって変更内容が返されます(つまり、NULL可能ではありませんが、 DACPACにある状態です) – Robba
合意しました、それは不完全です。私たち(SSDTチーム)は、これらのシナリオを改善したいが、それより先に優先順位を付けた他の改善(例えば、列順序を無視するなど)を行っている。 –
私は、ポストデプロイメントスクリプトが実行されるまでfkが無効になると思ったので、ポストデプロイメントでデータをセットアップすることができました(new_col = nullのような再実行可能/冪等) post配備が実行され、列が更新され、最後に、アップグレードの最後に制約が有効になります。 –