web-dev-qa-db-fra.com

Modification d'un type de données de colonne de datetime à float

J'ai une table avec une colonne float. Toutes les valeurs de cette colonne pour tous les enregistrements sont NULL. Je veux changer le type de données en datetime.

J'ai exécuté la requête:

ALTER TABLE MyTable ALTER Column MyColumn DATETIME NULL

Ça marche. Mais lorsque j'essaye d'annuler les modifications en définissant le type de données sur float:

ALTER TABLE MyTable ALTER Column MyColumn FLOAT NULL

Je reçois l'exception:

La conversion implicite du type de données datetime en float n'est pas autorisée. Utilisez la fonction CONVERT pour exécuter cette requête.

Notez que la colonne MyColumn est null pour tous les enregistrements.

5
Anirudha

Sans données dans la colonne, vous pouvez simplement les déposer et les ajouter à nouveau.

alter table MyTable drop column MyColumn;

go

alter table MyTable add MyColumn float;

Si vous avez des données dans votre colonne et qu'il est logique de convertir les valeurs en une valeur flottante, vous pouvez renommer la colonne, ajouter une nouvelle colonne, déplacer les données à l'aide de convert, puis supprimer l'ancienne colonne.

exec sp_rename 'MyTable.MyColumn', 'Temp_MyColumn', 'COLUMN';

go

alter table MyTable add MyColumn float;

go

update MyTable 
set MyColumn = convert(float, Temp_MyColumn) 
where Temp_MyColumn is not null;

go

alter table MyTable drop column Temp_MyColumn;
8
Mikael Eriksson