it-swarm.com.de

Ändern eines Spaltendatentyps von datetime in float

Ich habe eine Tabelle mit einer float Spalte. Alle Werte in dieser Spalte für alle Datensätze sind NULL. Ich möchte den Datentyp in datetime ändern.

Ich habe die Abfrage ausgeführt:

ALTER TABLE MyTable ALTER Column MyColumn DATETIME NULL

Es klappt. Aber wenn ich versuche, die Änderungen rückgängig zu machen, indem ich den Datentyp auf float setze:

ALTER TABLE MyTable ALTER Column MyColumn FLOAT NULL

Ich bekomme die Ausnahme:

Eine implizite Konvertierung vom Datentyp datetime in float ist nicht zulässig. Verwenden Sie die CONVERT-Funktion, um diese Abfrage auszuführen.

Beachten Sie, dass die Spalte MyColumn für alle Datensätze null ist.

5
Anirudha

Ohne Daten in der Spalte können Sie sie einfach löschen und erneut hinzufügen.

alter table MyTable drop column MyColumn;

go

alter table MyTable add MyColumn float;

Wenn Ihre Spalte Daten enthält und es sinnvoll ist, die Werte in einen Gleitkommawert umzuwandeln, können Sie die Spalte umbenennen, eine neue Spalte hinzufügen, die Daten mit convert verschieben und dann die alte Spalte löschen.

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