it-swarm.it

Modifica della larghezza della colonna

Aumentare la larghezza di una colonna (nvarchar) eliminerà necessariamente la tabella?

In altre parole, è possibile modificare la larghezza in un ambiente di produzione con utenti attivi?

Ho pensato che se le dimensioni aumentassero (anziché diminuire) questo non sarebbe un problema.

40
Fernando

Se lo stai facendo attraverso un'istruzione T-SQL come di seguito, non si verificherà alcuna caduta di tabella e puoi farlo tranquillamente in un ambiente di produzione:

alter table <table> alter column <column> nvarchar(biggernumber) [not] null

Se lo fai tramite la GUI della tabella di progettazione SSMS, dipenderà dallo script che decide di utilizzare per implementare la modifica. A volte inserisce i dati in una tabella temporanea, elimina la tabella originale, crea una nuova versione di quella tabella e li inserisce nuovamente in quella nuova. Un modo semplice per scoprire cosa farà è fare clic sul pulsante "Genera script" e guardare il T-SQL che prevede di eseguire.

53
Derek Kromm

Aumentare la larghezza della colonna di una colonna nvarchar non richiede l'eliminazione di una tabella. Né qualsiasi operazione ALTER TABLE. Per i dettagli sulle restrizioni quando si modificano le proprietà di tabella o colonna, è possibile leggere sull' istruzione ALTER TABLE .

Ho copiato le parti più rilevanti dalla documentazione seguente:

Modifica della dimensione di una colonna

È possibile modificare la lunghezza, la precisione o la scala di una colonna specificando una nuova dimensione per il tipo di dati della colonna nella clausola ALTER COLUMN. Se nella colonna sono presenti dati, la nuova dimensione non può essere inferiore alla dimensione massima dei dati. Inoltre, la colonna non può essere definita in un indice, a meno che la colonna non sia un tipo di dati varchar, nvarchar o varbinary e l'indice non sia il risultato di un vincolo PRIMARY KEY. Vedi esempio P.

Serrature e ALTER TABLE

Le modifiche specificate in ALTER TABLE vengono implementate immediatamente. Se le modifiche richiedono modifiche delle righe nella tabella, ALTER TABLE aggiorna le righe. ALTER TABLE acquisisce un blocco di modifica dello schema sulla tabella per assicurarsi che nessun'altra connessione faccia riferimento ai metadati della tabella durante la modifica, ad eccezione delle operazioni di indice online che richiedono un blocco SCH-M molto breve alla fine. In un'operazione ALTER TABLE ... SWITCH, il blocco viene acquisito su entrambe le tabelle di origine e destinazione. Le modifiche apportate alla tabella sono registrate e completamente recuperabili. Le modifiche che influiscono su tutte le righe di tabelle molto grandi, come l'eliminazione di una colonna o l'aggiunta di una colonna NOT NULL con un valore predefinito, possono richiedere molto tempo per completare e generare molti record di registro. Queste istruzioni ALTER TABLE devono essere eseguite con la stessa cura di qualsiasi istruzione INSERT, UPDATE o DELETE che interessa molte righe.

18
MicSim