Protezione dei dati durante un'operazione di ridenominazione
Aggiornamento: novembre 2007
Quando si rinomina un oggetto di database e si compila quindi il progetto di database, viene generato uno script di distribuzione che riflette tale modifica. Quando si rinomina una colonna o una tabella, lo script elimina la colonna o tabella originale con il nome originale e aggiunge la nuova colonna o tabella con il nuovo nome. Se questa modifica viene distribuita nel database esistente come aggiornamento, i dati della colonna o tabella originale andranno persi.
È possibile controllare se la colonna o tabella originale deve essere eliminata o meno impostando l'opzione appropriata nelle proprietà del progetto. La scheda Compilazione delle proprietà del progetto contiene la casella di controllo Genera istruzioni DROP per oggetti contenuti nel database di destinazione, ma non nel progetto di database. Se questa casella di controllo viene selezionata, l'istruzione drop relativa all'oggetto precedente verrà inclusa nello script di distribuzione creato durante la compilazione del progetto. Se questa casella di controllo viene deselezionata, l'istruzione drop dell'oggetto precedente non verrà inclusa nello script di distribuzione generato durante la compilazione del progetto.
Utilizzo di sp_rename
È possibile modificare manualmente lo script di compilazione per convertire in sp_rename l'operazione di eliminazione/aggiunta relativa alla colonna e alla tabella.
Per una tabella, è ad esempio possibile specificare quanto segue:
sp_rename '<OLD TABLE NAME>', '<NEW TABLE NAME>', 'OBJECT'
Per una colonna, è ad esempio possibile specificare quanto segue:
sp_rename '<TABLE NAME>.<OLD COLUMN NAME>', '<NEW COLUMN NAME>', 'COLUMN'
Per ulteriori informazioni, vedere Procedura: distribuire le modifiche del refactoring del database.
Spostamento di dati tra oggetti precedenti e nuovi
Per evitare potenziali perdite di dati causate dall'istruzione drop, è possibile scegliere di non distribuire l'istruzione drop. Il database di destinazione conterrà copie sia dell'oggetto precedente che del nuovo oggetto. È possibile spostare i dati dall'oggetto precedente al nuovo oggetto e quindi eliminare l'oggetto precedente. A tale scopo, utilizzare uno dei seguenti metodi:
Utilizzare un'istruzione select o un'altra istruzione T-SQL per spostare i dati manualmente.
Per una tabella, è ad esempio possibile specificare quanto segue:
-- 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
Per una colonna, è ad esempio possibile specificare quanto segue:
-- 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
Utilizzare l'utilità bcp, Data Transformation Services (SQL 2000 - informazioni in lingua inglese) o SQL Server Integration Services (SQL 2005) per spostare automaticamente i dati.
Spostamento dei dati mediante archiviazione temporanea
Per evitare potenziali perdite di dati causate dall'istruzione drop, è possibile spostare i dati in uno spazio di archiviazione temporaneo. Prima di distribuire la modifica, è possibile spostare i dati dalla tabella precedente a uno spazio temporaneo. Ad esempio, è possibile spostare i dati in una tabella di un database diverso o in un file di dati, quindi distribuire le istruzioni drop e add, infine spostare i dati dallo spazio temporaneo alla nuova tabella. A tale scopo, utilizzare uno dei seguenti metodi:
Utilizzare un'istruzione select into o un'altra istruzione T-SQL per spostare i dati manualmente.
Per una tabella, è ad esempio possibile specificare quanto segue:
-- 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
Per una colonna, è ad esempio possibile specificare quanto segue:
-- 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
Utilizzare l'utilità bcp, Data Transformation Services (SQL 2000 - informazioni in lingua inglese) o SQL Server Integration Services (SQL 2005) per spostare automaticamente i dati.
Vedere anche
Attività
Procedura: controllare la perdita di dati durante la distribuzione in database esistenti
Altre risorse
Ridenominazione di oggetti di database
Cenni preliminari sul refactoring di ridenominazione