Il modo migliore per rinominare le tabelle dopo lo sviluppo completato


8

Qual è l'approccio più semplice e affidabile per rinominare le tabelle e le colonne del database in SQL Server 2008 r2? Abbiamo terminato lo sviluppo e per alcuni motivi, siamo tenuti a rinominare alcune tabelle e afew le colonne.

Usare i sinonimi è il modo migliore per farlo? Quali sono le insidie ​​per cui dovremmo essere preparati? Aiuta anche a rinominare le colonne con grazia?

Abbiamo molti script relativi a queste tabelle e anche loro sono indicati nell'applicazione dagli sviluppatori .net.


L'intenzione è di rinominare questi oggetti di database e fornire una facciata in modo che le app esistenti non debbano essere modificate per utilizzare i nuovi nomi di oggetti?
billinkc,

Risposte:


10

Penso che l'approccio dipenda dal fatto che le applicazioni siano attive o che tu stia ancora testando.

Per le tabelle, l'approccio più sicuro è quello di creare un sinonimo usando il nuovo nome. In questo modo puoi cambiare le app una alla volta (o anche un riferimento alla volta), senza doverle cambiare tutte in una volta. Non è necessario eliminare il sinonimo e rinominare la tabella fino a quando non si è certi di disporre di tutte le modifiche.

CREATE SYNONYM dbo.NewName FOR dbo.OldName;
-- change app to point to dbo.NewName;

-- once all of your changes have been tested:
BEGIN TRANSACTION;
  DROP SYNONYM dbo.NewName;
  EXEC sp_rename N'dbo.OldName', N'NewName', N'OBJECT';
COMMIT TRANSACTION;

Per le colonne, è un po 'più complicato. È possibile creare sinonimi che rimandano a una vista, ma non tutte le viste saranno necessariamente aggiornabili a seconda della tabella di base. Come semplice esempio:

CREATE VIEW dbo.vNewName 
AS 
  SELECT Column1, NewColumnName = OldColumnName
    FROM dbo.OldName;

CREATE SYNONYM dbo.NewName FOR dbo.vNewName;

Quindi, come sopra, quando hai cambiato tutti i riferimenti alle colonne e al nuovo nome della tabella, semplicemente:

BEGIN TRANSACTION;
  DROP SYNONYM dbo.NewName;
  DROP VIEW dbo.vNewName;
  EXEC sp_rename N'dbo.OldName', N'NewName', N'OBJECT';
  EXEC sp_rename N'dbo.NewName.OldColumnName', N'NewColumnName', N'COLUMN';
COMMIT TRANSACTION;

Se l'applicazione non è attiva e sta ancora eseguendo i test, basta rinominare le colonne e correggere ciò che si interrompe dopo una ricerca globale e sostituire (o refactor intelligente utilizzando SSDT, RedGate, ecc.) Tramite il codice / le procedure dell'app ecc.

Se l'applicazione è attiva, dovrai fare un passo un po 'più cauto.


+1 per convalidare la modifica e correggere l'approccio rotto per cui ottengo schifo dalla mia stessa squadra (dev enviro solo ovviamente)
RThomas

Grazie per la tua buona risposta, ma saresti in grado di consigliarmi cosa intendi con: "In questo modo puoi cambiare l'app (le) una alla volta (o anche un riferimento alla volta), senza dover cambiare tutto immediatamente ". Vuoi dire che dovremmo creare il sinonimo uno alla volta, ad esempio prima tabella t1, il codice cambia, quindi tabella t2, ecc?
Sky,

Siamo ora in fase di sviluppo, ma il sistema è stato quasi completato per quel componente che queste tabelle devono essere rinominate. Il sistema è ora distribuito su UAT.
Sky,

1
@Nazila no, intendo che puoi creare un sinonimo per table1 (e uno per table2, table3, ecc.). Quindi è possibile modificare un'app, una classe, un modulo o una procedura memorizzata per utilizzare il nuovo nome tramite il sinonimo. Il resto del codice può continuare a utilizzare il vecchio nome. Non abbandoneresti il ​​sinonimo e rinomineresti fino all'aggiornamento di tutto il codice.
Aaron Bertrand

0

Bene, ci sono molte insidie ​​che puoi incontrare quando cambi il nome di tabelle e colonne. Qualsiasi altro codice SQL o di applicazione che li chiama dovrà essere rinominato in modo che corrisponda o non funzionerà. Redgate crea alcuni strumenti piuttosto validi che possono essere eseguiti e apportare tutte le modifiche a veiws / funzioni / sprocs SQL dipendenti. Il più grande consiglio che posso darti è quello di fare prima queste modifiche in un ambiente DEV e TEST TEST TEST per assicurarti di aver corretto il codice ovunque.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.