Comment changez-vous le type de données d'une colonne dans SQL Server?

Réponses:

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

EDIT Comme indiqué NULL / NOT NULL aurait dû être spécifié, voir également la réponse de Rob .

cmsjr
la source
1
Pourquoi devrait-il être spécifié? Quel est l'avantage? Tout ce que je veux laisser tel quel, je n'ai pas à le mentionner, je pense.
L'incroyable
5
@TheincredibleJan Ce serait cool, mais malheureusement cela ne fonctionne pas de cette façon. Si vous émettez une ALTER TABLE TableName ALTER COLUMN ColumnNamecommande pour modifier une colonne existante [NOT NULL]et que vous ne la spécifiez pas explicitement, ce sera par la [NULL]suite, car c'est la valeur par défaut.
takrl
4
Cela ne fonctionne que si vous n'avez pas de contraintes et d'index sur cette colonne, sinon, vous devez tout supprimer et le recréer, ce qui est fastidieux et difficile, surtout si vous avez de nombreuses références étrangères sur cette colonne. par exemple lors du passage de tinyint à int.
Hrvoje Batrnek
Attention si vous avez un IDE ouvert (comme SSMS). Même avec mon onglet Designer fermé sur le tableau que je modifiais (après avoir exécuté le script et cliqué avec le bouton droit sur le tableau pour sélectionner "Conception"), il montrait toujours les anciens types de données! Ce n'est qu'après avoir fermé TOUS mes onglets dans Management Studio et ouvert à nouveau le mode Création qu'il a finalement montré le DataType mis à jour. Très effrayant, alors soyez prudent (il peut s'agir d'un bogue de cache qui est corrigé maintenant ou un MS ne dérange jamais la correction). Pour ceux qui se demandent pourquoi j'ai exécuté T-SQL lorsque j'utilise Design-View, je voulais modifier mes DataTypes SysName(ce que SSMS n'autorise pas).
MikeTeeVee
Je n'ai pas eu de chance avec ces commandes dans XAMPP. ALTER TABLE table MODIFY COLUMN column datatypetravaillé pour moi.
Pavindu
173

N'oubliez pas la nullité.

ALTER TABLE <schemaName>.<tableName>
ALTER COLUMN <columnName> nvarchar(200) [NULL|NOT NULL]
Rob Garrison
la source
2
Quelle est la question de la nullité? Si je ne veux pas le changer - quel est l'avantage de le redéfinir?
L'incroyable
7
^ Il prendra par défaut la valeur NULL une fois que l'instruction alter table aura fini de s'exécuter sans définir explicitement ce qu'elle devrait être.
sc305495
1
@ sc305495 ​​Pour être exact, il correspondra par défaut à vos paramètres ANSI_NULL_DEFAULT.
Zikato
23

Utilisez l'instruction Alter table.

Alter table TableName Alter Column ColumnName nvarchar(100)
John Sansom
la source
13

La syntaxe pour modifier une colonne dans une table existante dans SQL Server (Transact-SQL) est:

ALTER TABLE table_name
    ALTER COLUMN column_name column_type;

Par exemple:

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

Cet ALTER TABLEexemple SQL Server modifiera la colonne appelée last_namepour être un type de données VARCHAR(75)et forcera la colonne à ne pas autoriser les valeurs nulles.

voir ici

Yogesh Bende
la source
1
veuillez ajouter plus d'informations à votre réponse et formater le code / la requête!
Sebastian Brosch
4

Tant que vous augmentez la taille de votre varchar, vous êtes OK. Selon la référence Alter Table :

La réduction de la précision ou de l'échelle d'une colonne peut entraîner la troncature des données.

jocassid
la source
3

Pour changer le type de données

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

Pour changer la clé primaire

ALTER TABLE table_name  
ADD CONSTRAINT PK_MyTable PRIMARY KEY (column_name)
Alexander Zaldostanov
la source
1
ALTER TABLE [dbo].[TableName]
ALTER COLUMN ColumnName VARCHAR(Max) NULL
Muhammad Omair
la source
Cela ne semble rien ajouter à la réponse acceptée existante d'il y a des années, et les modifications que vous avez publiées dans la structure du tableau ne correspondent pas réellement à la question.
PeterJ
-11

Essaye ça:

ALTER TABLE "table_name"
MODIFY "column_name" "New Data Type";
Kai Tzer
la source
1
"Modifier" n'est évidemment pas correct. Veuillez comparer avec d'autres réponses.
Frank
3
C'est ancien, mais il semble que Kai Tzer prouvait MySql et / ou Oracle DDL.
Sheldon Cohen
1
D'accord avec Sheldon, les réponses ici ne m'ont pas aidé avec Oracle SQL, juste ça
AsfK