Ich bin auf der Suche nach DACPACs für unsere Datenbankänderungen, aber ich bin ein wenig ratlos, was zu tun ist, wenn es um komplexere Datenbankupdates geht. Um zu veranschaulichen, was ich meine, lassen Sie mich ein einfaches Beispiel verwenden, das dasselbe Problem hat.DACPAC-Paket mit komplexen Änderungen
Angenommen, ich besitze eine Customer-Tabelle, die gerade aktiv ist, und möchte eine neue CustomerType-Tabelle mit einem Fremdschlüssel vom Kunden zum CustomerType hinzufügen. Die neue Spalte in Customer sollte erforderlich sein (nicht Nullable), sollte aber keinen Standardwert haben.
Ich möchte eine beliebige Formel verwenden, um den ursprünglichen Typ für die bestehenden Kunden beim Aktualisieren einzurichten. Wie würde ich dies mit einem DACPAC erreichen?
Der DACPAC wird nur wissen, dass es eine neue Spalte gibt und versuchen, sie der Tabelle Customer hinzuzufügen, die natürlich fehlschlägt, weil sie benötigt wird. Das Festlegen eines Standardwerts ist unerwünscht, da NULL-Werte zulässig sind.
Da der DACPAC für die Aktualisierung von jedem Status auf den neuesten verwendet werden kann, sehe ich nicht, welche Art von Konfiguration oder Pre/Post-Scripts ich einrichten sollte, damit dies funktioniert.
Verschiedene Suchanfragen haben einen enttäuschenden Mangel an nützlichen Ergebnissen :(
Ich hoffe, es ist jemand hier, die helfen kann. Vielen Dank im Voraus.
Nun, ich würde gerne in der Lage sein, den DACPAC als einen Endzustand zu verwenden, wie er beabsichtigt ist, aber mit einer gewissen Kontrolle über die Übergänge zwischen Zuständen. Wenn Sie ein Post-Deployment-Skript verwenden, das die Nullbarkeit der Spalte ändert, bedeutet dies, dass jeder Vergleich zwischen dem DACPAC und einer vollständig aktuellen Datenbank noch Änderungen nach sich zieht (nämlich die Spalte, die nicht nullfähig ist, aber nach dem 'final Staat 'das ist in der DACPAC) – Robba
Einverstanden, es ist unvollkommen. Wir (das SSDT-Team) möchten diese Szenarios verbessern, haben jedoch andere Verbesserungen priorisiert (z. B. das Hinzufügen einer ignorierten Spaltenreihenfolge). –
Ich dachte, die fk wäre deaktiviert, bis nach dem Post-Deployment-Skript ausgeführt wurde, so dass Sie die Daten in der Post-Bereitstellung einrichten konnten (machen Sie es re-runnable/idempotent wie where new_col = null) und die Spalte würde ohne die Einschränkung hinzugefügt werden, Die Post-Bereitstellung wird ausgeführt und aktualisiert die Spalte und schließlich werden die Einschränkungen am Ende des Upgrades aktiviert. –