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.