Condividi tramite


Considerazioni prima della ridenominazione di oggetti di database

Aggiornamento: novembre 2007

Prima di rinominare un oggetto di database in Visual Studio Team System Database Edition, è necessario considerare quanto segue:

Prevenzione della perdita di dati quando si rinominano colonne e tabelle

Ridenominazione delle colonne nelle viste

Effetti degli errori di generazione

Effetti sui piani di generazione dati

Effetti sugli unit test

Effetti sugli script T-SQL

Prevenzione della perdita di dati quando si rinominano colonne e tabelle

Quando si rinomina un oggetto di database, lo script di distribuzione generato con il progetto riflette tale modifica. Quando si rinomina una colonna o una tabella, nello script viene eliminato l'oggetto originale con il nome originale e viene aggiunta la nuova colonna o tabella con il nuovo nome. Se questa modifica viene distribuita nel database esistente come aggiornamento, i dati della colonna o della tabella originale verranno persi.

È possibile controllare se eliminare o meno la colonna o la tabella originale impostando l'opzione appropriata nelle proprietà del progetto. A tale scopo, aprire le proprietà del progetto facendo clic sulla scheda Genera e selezionare o deselezionare la casella di controllo Genera istruzioni DROP per oggetti contenuti nel database di destinazione, ma non nel progetto di database. Se si seleziona questa casella di controllo, l'istruzione drop per l'oggetto precedente verrà inclusa nello script di distribuzione generato con il progetto. Se si deseleziona questa casella di controllo, l'istruzione drop per l'oggetto precedente non verrà inclusa nello script di distribuzione generato con il progetto.

Per evitare la potenziale perdita di dati causata dall'istruzione drop, è necessario pianificare in anticipo questa operazione. Negli esempi riportati di seguito vengono illustrati approcci possibili per la migrazione sicura dei dati:

  • Sostituire le istruzioni drop o add con istruzioni sp_rename.

  • Non distribuire l'istruzione drop. Si avranno copie dell'oggetto precedente e del nuovo oggetto e sarà possibile spostare i dati tra di esse. È possibile spostare i dati manualmente utilizzando select into o un'altra istruzione T-SQL. È possibile utilizzare Bulk Copy Program, Data Transformation Services (SQL 2000) o SQL Server Integration Services (SQL 2005) per spostare i dati automaticamente.

  • Prima di distribuire la modifica, spostare i dati dalla tabella precedente a un percorso temporaneo, ad esempio in una tabella di un altro database. Distribuire le istruzioni drop e add. Spostare i dati dal percorso temporaneo al nuovo oggetto. È possibile spostare i dati manualmente utilizzando select into o un'altra istruzione T-SQL. È possibile utilizzare Bulk Copy Program, Data Transformation Services (SQL 2000) o SQL Server Integration Services (SQL 2005) per spostare i dati automaticamente.

Per ulteriori informazioni, vedere Protezione dei dati durante un'operazione di ridenominazione.

Ridenominazione delle colonne nelle viste

Una vista è costituita da un'istruzione che seleziona colonne da tabelle o altre viste. Le tabelle utilizzate nella vista sono definite tabelle di base o sottostanti. Il codice riportato di seguito, ad esempio, crea una vista basata sulla tabella HumanResources.Employee:

CREATE VIEW dbo.vEmployeeTest
AS 
     SELECT EmployeeID, Title
       FROM HumanResources.Employee

Quando si rinomina una colonna in una vista, la colonna non viene rinominata nella tabella sottostante. Per il nome nella vista, invece, viene utilizzato un alias, come negli esempi seguenti:

CREATE VIEW dbo.vEmployeeTest
AS 
     SELECT EmployeeID, Title AS JobTitle
       FROM HumanResources.Employee

CREATE VIEW dbo.vEmployeeTest (EmployeeID, JobTitle)
AS 
     SELECT EmployeeID, Title
       FROM HumanResources.Employee
Nota:

Se una vista utilizza SELECT * per ottenere dati dalla tabella sottostante, l'asterisco (*) viene espanso per elencare le singole colonne. Per la colonna rinominata viene utilizzato un alias come negli esempi precedenti.

Se si desidera rinominare la colonna sia nella vista che nella tabella sottostante, rinominare la colonna nella tabella in modo che venga automaticamente aggiornata nella vista.

Effetti degli errori di generazione

Quando si rinomina un oggetto di database in Database Edition, viene effettuato un tentativo di aggiornare altri oggetti di database, piani di generazione dati, unit test e script che fanno riferimento a tale oggetto. Mentre si utilizza un progetto di database, è possibile che venga eseguita un'azione che provoca un errore di generazione e, successivamente, un'altra azione che corregge tale errore. Si potrebbe, ad esempio, eliminare una tabella e successivamente aggiornare una vista che dipende da tale tabella per rimuovere il riferimento alla tabella eliminata. Nel periodo compreso tra l'eliminazione della tabella e l'aggiornamento della vista, nel progetto saranno presenti errori di generazione.

Se si rinomina un oggetto di database quando nel progetto sono presenti errori di generazione, l'oggetto potrà comunque essere rinominato correttamente. Può non essere possibile, tuttavia, aggiornare correttamente tutti i riferimenti all'oggetto che viene rinominato. Se nel progetto sono presenti errori di generazione, viene visualizzato un avviso nella finestra di dialogo Anteprima modifiche. Se si continua, l'oggetto verrà rinominato e verrà aggiornato il numero più elevato possibile di riferimenti. Se l'operazione viene annullata, sarà possibile correggere gli errori di generazione e, successivamente, eseguire nuovamente l'operazione di ridenominazione.

Nella finestra di dialogo Anteprima modifiche vengono visualizzati avvisi per:

  • Errori di generazione nel progetto di database

  • Errori di sintassi in script e unit test

  • Piani di generazione dati in formato non valido

Effetti sui piani di generazione dati

Quando si rinomina un oggetto di database in Team Edition for Database Professionals, viene effettuato un tentativo di aggiornare i piani di generazione dati che fanno riferimento a tale oggetto. È tuttavia necessario tenere presenti le considerazioni seguenti:

  • Prima di rinominare un oggetto, è necessario salvare gli eventuali piani di generazione dati aperti nell'Editor. Se sono presenti piani di generazione dati aperti quando si tenta di rinominare un oggetto, verrà innanzitutto richiesto di salvare i piani. Se si continua, tutti i piani di generazione dati aperti verranno salvati e chiusi automaticamente e l'operazione di ridenominazione proseguirà. Se non si continua, l'operazione di ridenominazione verrà annullata. Tutti i piani di generazione dati rimarranno aperti e non verranno salvati.

  • È necessario aggiornare manualmente i piani di generazione dati che utilizzano generatori di dati associati a dati.

Per ulteriori informazioni, vedere Generazione di dati con i generatori di dati.

Effetti sugli unit test

Le istruzioni T-SQL (Transact-SQL) in uno unit test fanno in genere riferimento agli oggetti del database specificati in ValidationConnectionString e ExecutionConnectionString nello unit test. Di seguito sono riportati due casi diversi:

  • Le istruzioni T-SQL in uno unit test possono fare riferimento a oggetti in altri database.

  • Le istruzioni T-SQL in uno unit test possono fare riferimento a oggetti nello stesso database, ma in schemi diversi (SQL Server 2005).

Quando si rinomina un oggetto di database in Database Edition, viene effettuato un tentativo di aggiornare gli unit test della soluzione che fanno riferimento a tale oggetto. Nei casi indicati in precedenza, può non essere possibile aggiornare gli unit test. Per aggiornare gli unit test quando si rinomina un oggetto di database, è necessario assicurarsi di utilizzare il nome completo degli oggetti negli unit test. Se si utilizzano nomi completi negli unit test, il motore di refactoring potrà aggiornarli ogni volta che viene rinominato un oggetto dello schema.

Per ulteriori informazioni sugli unit test, vedere Cenni preliminari sull'esecuzione di unit test del database.

Effetti sugli script T-SQL

Gli script T-SQL in un progetto di database fanno in genere riferimento agli oggetti dello schema nel progetto del database. Di seguito sono riportati due casi diversi:

  • Le istruzioni T-SQL in uno script possono fare riferimento a oggetti in altri database.

  • Le istruzioni T-SQL in uno script possono fare riferimento a oggetti nello stesso database, ma in schemi diversi (SQL Server 2005).

Quando si rinomina un oggetto di database in Database Edition, viene effettuato un tentativo di aggiornare gli script della soluzione che fanno riferimento a tale oggetto. Nei casi indicati in precedenza, può non essere possibile aggiornare gli script. Per aggiornare gli script quando si rinomina un oggetto di database, è necessario assicurarsi di utilizzare il nome completo degli oggetti negli script. Se si utilizzano nomi completi negli script, il motore di refactoring potrà aggiornarli ogni volta che viene rinominato un oggetto dello schema.

Per ulteriori informazioni sugli script, vedere Utilizzo di script di database.

Sicurezza

Se un errore impedisce il completamento di un'operazione di refactoring, le informazioni sull'errore vengono scritte nel log eventi dell'applicazione, che può essere aperto da qualsiasi utente che dispone delle autorizzazioni di utente normale. Se le informazioni dello schema sono considerate riservate e possono comparire nel log, è possibile cancellare il log o limitare l'accesso al computer client.

Vedere anche

Concetti

Panoramica sulla terminologia di Database Edition

Altre risorse

Ridenominazione di oggetti di database

Cenni preliminari sul refactoring di ridenominazione