Come si modifica il tipo di dati di una colonna in SQL Server?


Risposte:


564
ALTER TABLE TableName 
ALTER COLUMN ColumnName NVARCHAR(200) [NULL | NOT NULL]

EDIT Come indicato NULL / NOT NULL avrebbe dovuto essere specificato, vedi anche la risposta di Rob .


1
Perché dovrebbe essere specificato? Qual è il vantaggio? Tutto ciò che voglio lasciare così com'è, non devo menzionarlo, credo.
L'incredibile Jan

5
@TheincredibleJan Sarebbe bello, ma sfortunatamente non funziona in questo modo. Se si emette un ALTER TABLE TableName ALTER COLUMN ColumnNamecomando per modificare una colonna esistente che è [NOT NULL], e non lo si specifica esplicitamente, lo sarà in [NULL]seguito, poiché è l'impostazione predefinita.
takrl,

4
Funziona solo se non hai vincoli e indici su quella colonna, altrimenti, devi eliminare tutto e ricrearlo, il che è un lavoro noioso e grugnito, specialmente se hai molti riferimenti stranieri su quella colonna. ad es. quando si passa da tinyint a int.
Hrvoje Batrnek,

Fai attenzione se hai un IDE aperto (come SSMS). Anche con la mia scheda Designer chiusa sul tavolo stavo modificando (dopo aver eseguito lo script e facendo clic con il pulsante destro del mouse sulla tabella per selezionare "Design") mostrava ancora i vecchi tipi di dati! Fu solo dopo aver chiuso TUTTE le mie schede in Management Studio e aver riaperto la visualizzazione di progettazione che finalmente mostrò il DataType aggiornato. Molto spaventoso, quindi fai attenzione (potrebbe trattarsi di un bug di cache che ora è stato risolto o che un MS non si preoccupa mai di risolverlo). Per coloro che si chiedevano perché avessi eseguito T-SQL quando utilizzo Design-View, volevo modificare i miei DataTypes SysName(che SSMS non consente).
MikeTeeVee,

Non ho avuto fortuna con questi comandi in XAMPP. ALTER TABLE table MODIFY COLUMN column datatypeha funzionato per me.
Pavindu,

173

Non dimenticare la nullità.

ALTER TABLE <schemaName>.<tableName>
ALTER COLUMN <columnName> nvarchar(200) [NULL|NOT NULL]

2
Qual è il problema con nullability? Se non desidero modificarlo, qual è il vantaggio di impostarlo di nuovo?
L'incredibile gennaio

7
^ L'impostazione predefinita sarà NULL al termine dell'esecuzione dell'istruzione alter table senza definire esplicitamente quale dovrebbe essere.
sc305495

1
@ sc305495 ​​Per l'esattezza, per impostazione predefinita saranno tutte le impostazioni ANSI_NULL_DEFAULT.
Zikato,

23

Utilizzare l'istruzione Alter table.

Alter table TableName Alter Column ColumnName nvarchar(100)

13

La sintassi per modificare una colonna in una tabella esistente in SQL Server (Transact-SQL) è:

ALTER TABLE table_name
    ALTER COLUMN column_name column_type;

Per esempio:

ALTER TABLE employees
    ALTER COLUMN last_name VARCHAR(75) NOT NULL;

Questo ALTER TABLEesempio di SQL Server modificherà la colonna chiamata last_namecome tipo di dati VARCHAR(75)e imporrà alla colonna di non consentire valori null.

vedi qui


1
si prega di aggiungere ulteriori informazioni alla risposta e formattare il codice / query!
Sebastian Brosch,

4

Fintanto che stai aumentando le dimensioni del tuo varchar stai bene. Come da riferimento alla tabella alterata:

La riduzione della precisione o della scala di una colonna può causare il troncamento dei dati.


3

Per modificare il tipo di dati

alter table table_name 
alter column column_name datatype [NULL|NOT NULL]

Per cambiare la chiave primaria

ALTER TABLE table_name  
ADD CONSTRAINT PK_MyTable PRIMARY KEY (column_name)

1
ALTER TABLE [dbo].[TableName]
ALTER COLUMN ColumnName VARCHAR(Max) NULL

Ciò non sembra aggiungere nulla rispetto alla risposta accettata esistente di anni fa e anche le modifiche che hai pubblicato nella struttura della tabella non corrispondono effettivamente alla domanda.
PeterJ

-11

Prova questo:

ALTER TABLE "table_name"
MODIFY "column_name" "New Data Type";

1
"Modifica" ovviamente non è corretto. Si prega di confrontare con altre risposte.
Frank

3
Questo è vecchio, ma sembra che Kai Tzer stesse dimostrando MySQL e / o Oracle DDL.
Sheldon Cohen,

1
D'accordo con Sheldon, le risposte qui non mi hanno aiutato con Oracle sql, solo questo
AsfK
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.