Freigeben über


Schützen von Daten während eines Umbenennungsvorgangs

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 ein bcp (Dienstprogramm), Data Transformation Services (SQL 2000) oder SQL Server Integration Services (SSIS) (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 ein bcp (Dienstprogramm), Data Transformation Services (SQL 2000) oder SQL Server Integration Services (SSIS) (SQL 2005), um die Daten automatisch zu verschieben.

Siehe auch

Aufgaben

Gewusst wie: Kontrollieren von Datenverlusten während der Bereitstellung für vorhandene Datenbanken

Konzepte

Übersicht über die Umgestaltung mit Umbenennung

Weitere Ressourcen

Umbenennen von Datenbankobjekten
Bereitstellen von Umgestaltungsänderungen für eine Datenbank
Erstellen und Bereitstellen von Datenbankschemas