Ich habe ein SQL Server Data Tools (VS2012) -Projekt, das während des Erstellungsprozesses automatisch veröffentlicht wird. Eine Spalte wurde kürzlich von einem int
auf aktualisiert decimal(18,4)
. Infolge dieser Änderung schlägt die Veröffentlichung mit dem Fehler fehl
(49,1): SQL72014: .Net SqlClient-Datenprovider: Nachricht 50000, Ebene 16, Status 127, Zeile 6 Zeilen wurden erkannt. Die Schemaaktualisierung wird beendet, da möglicherweise Daten verloren gehen. (44,0): SQL72045: Skriptausführungsfehler. Das ausgeführte Skript: / * Der Typ für die Spalte QuantityReceived in Tabelle [dbo]. [Reconciliation_Receiving] ist derzeit INT NOT NULL, wird jedoch in DECIMAL (18, 4) NOT NULL geändert. Datenverlust kann auftreten. * /
WENN EXISTIERT (wählen Sie die oberste 1 1 aus [dbo]. [Reconciliation_Receiving]) RAISERROR (N'Rows wurden erkannt. Die Schemaaktualisierung wird beendet, da möglicherweise Daten verloren gehen. ', 16, 127) WITH NOWAIT Während des Batches ist ein Fehler aufgetreten ausgeführt werden.
Ich verstehe, warum ich diesen Fehler erhalte, und ich weiß, dass er durch Deaktivieren des Flags "Inkrementelle Bereitstellung blockieren, wenn Datenverlust auftreten kann" behoben werden kann. Es gibt jedoch einen starken Widerstand gegen die Deaktivierung dieser Funktion, sodass dies keine akzeptable Lösung sein wird.
Die einzige andere Lösung, die ich mir vorstellen kann, ist Folgendes:
- Erstellen Sie eine temporäre Tabelle und kopieren Sie den Inhalt der vorhandenen Tabelle in die temporäre Tabelle
- Schneiden Sie die vorhandene Tabelle ab
- Lassen Sie SSDT den Datentyp aktualisieren
- Füllen Sie die Daten aus der temporären Tabelle wieder aus
Das scheint jedoch schrecklich klobig und ineffizient.
Gibt es eine bessere Alternative?