Schützen von Daten während eines Umbenennungsvorgangs
Aktualisiert: November 2007
Wenn Sie ein Datenbankobjekt umbenennen und anschließend das Datenbankprojekt erstellen, wird ein Bereitstellungsskript generiert, das diese Änderung widerspiegelt. Beim Umbenennen einer Spalte oder Tabelle löscht das Skript die ursprüngliche Spalte bzw. die ursprüngliche Tabelle mit dem Ausgangsnamen und fügt die neue Spalte oder die neue Tabelle mit dem neuen Namen hinzu. Wenn Sie diese Änderung als Aktualisierung in der vorhandenen Datenbank bereitstellen, gehen die Daten in der ursprünglichen Spalte oder der ursprünglichen Tabelle verloren.
Sie können steuern, ob die ursprüngliche Spalte oder Tabelle gelöscht wird, indem Sie die entsprechende Option in den Projekteigenschaften festlegen. Die Registerkarte Erstellen in den Projekteigenschaften enthält das Kontrollkästchen DROP-Anweisungen für Objekte generieren, die sich in der Zieldatenbank, nicht aber im Datenbankprojekt befinden. Wenn Sie dieses Kontrollkästchen aktivieren, wird die drop-Anweisung für das alte Objekt im Bereitstellungsskript eingeschlossen, das beim Erstellen des Projekts generiert wird. Wenn Sie dieses Kontrollkästchen deaktivieren, wird die drop-Anweisung für das alte Objekt nicht im Bereitstellungsskript eingeschlossen, das beim Erstellen des Projekts generiert wird.
Verwenden von sp_rename
Sie können das Buildskript manuell bearbeiten, um das Löschen und Hinzufügen der Spalte bzw. der Tabelle in sp_rename zu konvertieren.
Für eine Tabelle können Sie z. B. Folgendes angeben:
sp_rename '<OLD TABLE NAME>', '<NEW TABLE NAME>', 'OBJECT'
Für eine Spalte können Sie z. B. Folgendes angeben:
sp_rename '<TABLE NAME>.<OLD COLUMN NAME>', '<NEW COLUMN NAME>', 'COLUMN'
Weitere Informationen finden Sie unter Gewusst wie: Bereitstellen von Datenbankumgestaltungsänderungen.
Verschieben von Daten zwischen den alten und den neuen Objekten
Um Datenverluste durch die drop-Anweisung zu vermeiden, können Sie das Bereitstellen der drop-Anweisung verhindern. Sie verfügen dann in der Zieldatenbank über Kopien von dem alten Objekt und dem neuen Objekt. Sie können die Daten aus dem alten Objekt in das neue Objekt verschieben und dann das alte Objekt löschen. Sie können diesen Vorgang auch mithilfe einer der folgenden Methoden ausführen:
Verwenden Sie eine select-Anweisung oder eine andere T-SQL-Anweisung, um die Daten manuell zu verschieben.
Für eine Tabelle können Sie z. B. Folgendes angeben:
-- Deploy table add only. -- Move the data between the old and new tables. INSERT Region_New SELECT * FROM Region_Old -- Drop the old table manually. DROP TABLE Region_Old
Für eine Spalte können Sie z. B. Folgendes angeben:
-- Deploy column add only. -- Move the data between the old and new columns. UPDATE Region SET ColumnNew = ColumnOld -- Drop the old column manually. ALTER TABLE Region DROP COLUMN ColumnOld
Verwenden Sie das bcp-Dienstprogramm, Data Transformation Services (SQL 2000) oder SQL Server Integration Services (SQL 2005), um die Daten automatisch zu verschieben.
Verschieben von Daten mithilfe einer temporären Speicherung
Um Datenverluste durch die drop-Anweisung zu vermeiden, können Sie die Daten in einen temporären Speicher verschieben. Bevor Sie die Änderung bereitstellen, verschieben Sie die Daten aus der alten Tabelle an einen temporären Speicherort. Sie können die Daten z. B. in eine Tabelle in einer anderen Datei oder in eine Datendatei verschieben. Stellen Sie anschließend die drop-Anweisung und die add-Anweisung bereit. Verschieben Sie schließlich die Daten von dem temporären Speicherort in die neue Tabelle. Sie können diesen Vorgang auch mithilfe einer der folgenden Methoden ausführen:
Verwenden Sie eine select into-Anweisung oder eine andere T-SQL-Anweisung, um die Daten manuell zu verschieben.
Für eine Tabelle können Sie z. B. Folgendes angeben:
-- Move the data to temporary storage. SELECT * INTO TemporaryStorage.dbo.Region_Storage FROM Region_Old -- Deploy table drop/add. -- Move the data to the new table. INSERT Region_New SELECT * FROM TemporaryStorage.dbo.Region_Storage
Für eine Spalte können Sie z. B. Folgendes angeben:
-- Move the data to temporary storage. SELECT * INTO TemporaryStorage.dbo.Region_Storage FROM Region -- Deploy column drop/add. -- Move the data to the new column. UPDATE Region SET ColumnNew = rs.ColumnOld FROM Region r JOIN TemporaryStorage.dbo.Region_Storage rs ON r.RegionID = rs.RegionID
Verwenden Sie das bcp-Dienstprogramm, Data Transformation Services (SQL 2000) oder SQL Server Integration Services (SQL 2005), um die Daten automatisch zu verschieben.
Siehe auch
Aufgaben
Gewusst wie: Steuern von Datenverlusten während der Bereitstellung für vorhandene Datenbanken
Weitere Ressourcen
Umbenennen von Datenbankobjekten
Übersicht über die Umgestaltung mit Umbenennung
Bereitstellen von Umgestaltungsänderungen für eine Datenbank