Modifica della larghezza della colonna


39

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.

Risposte:


52

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 la 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.


1
Ho pensato che anche il pulsante "Genera script" emette un avviso che stai per abbandonare una tabella prima ancora di mostrarti lo script.
Nick Chammas,

1
Genera l'errore, ma in realtà non esegue lo script fino a quando non si fa clic su OK (o esegui o altro) sulla finestra con lo script. Puoi copiare lo script e cancellare la finestra che mostra lo script.
mrdenny,

ma funziona su per dire un passaggio da float a decimale (n, n)?
Nishanth Shaan,

Che effetto ha questo se la tabella viene replicata? Suppongo che le tabelle degli abbonati non si aggiornino automaticamente?
tmwoods

18

L'aumento della larghezza di una nvarcharcolonna non richiede l'eliminazione di una tabella. Né qualsiasi ALTER TABLEoperazione. Per 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 delle dimensioni 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 anche 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 INSERT, UPDATE,


Ottima anche la risposta. Ma potrei sceglierne solo uno. Grazie!
Fernando,
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.