Kann der Datentyp eines Felds von nvarchar in int geändert werden?
alter table employee alter column designation int
ist das gültig? Wenn nicht, kann es auf andere Weise gemacht werden?
P.S: Ich benutze MS SQL Server
Sie können versuchen, eine Alter-Tabelle zu erstellen. Wenn dies fehlschlägt, gehen Sie folgendermaßen vor:
ALTER TABLE tableName ADD newCol int;
UPDATE tableName SET newCol = CAST(oldCol AS int) FROM tableName;
Dies ist nur möglich, wenn die Spalte keinen Wert oder kein Leerzeichen hat. Wenn Ihre Spalte einen Wert hat, der den Wert Nvarchar hat und Sie versuchen sollten, ihn in int zu konvertieren, wird ein Fehler ausgegeben.
ALTER TABLE [table_name] ALTER COLUMN [column_name] [data_type]
Dies funktionierte für mich (mit Dezimalzahlen, aber ich denke, es wird mit Ints funktionieren):
alter table MyTable add MyColNum decimal(15,2) null
go
update MyTable set MyColNum=CONVERT(decimal(15,2), REPLACE(LTRIM(RTRIM(MyOldCol)), ',', '.')) where ISNUMERIC(MyOldCol)=1
go
alter table MyTable drop column MyOldCol
go
EXEC sp_rename 'MyTable.MyColNum', 'MyOldCol', 'COLUMN'
go
In nur 2 Schritten ist dies noch einfacher möglich
Aktualisieren Sie die Spalte und setzen Sie alle nicht nummerischen Werte auf null, damit die Änderungen nicht fehlschlagen.
Ändern Sie die Tabelle und setzen Sie den Typ auf int.
UPDATE employee
SET designation = (CASE WHEN ISNUMERIC(designation)=1 THEN CAST(CAST(designation AS FLOAT) AS INT)END )
ALTER TABLE employee
ALTER COLUMN designation INT
Dies setzt die Annahme voraus, dass die Spalten Nullen zulassen. Wenn nicht, muss dies auch behandelt werden. Beispiel: Wenn Sie die Spalte so ändern, dass sie Null zulässt, setzen Sie nach der Konvertierung in int alle Nullwerte auf 0, und ändern Sie die Tabelle so, dass Null nicht zulässig ist
Erstellen Sie eine temporäre Spalte
ALTER TABLE MYTABLE ADD MYNEWCOLUMN NUMBER(20,0) NULL;
Kopiert und überträgt die Daten aus der alten Spalte in die neue
UPDATE MYTABLE SET MYNEWCOLUMN=CAST(MYOLDCOLUMN AS NUMBER(20,0));
Alte Spalte löschen
ALTER TABLE MYTABLE DROP COLUMN MYOLDCOLUMN;
Benennen Sie die neue um, damit sie mit der alten übereinstimmt.
ALTER TABLE MYTABLE RENAME COLUMN MYNEWCOLUMN TO MYOLDCOLUMN;
Kannst du das versuchen?
alter table MyTable add MyColNum Varchar(500) null;
alter table MyTable add MyColNum int null;