Le type de données d'un champ peut-il être modifié en int de nvarchar ??
alter table employee alter column designation int
est-ce valide ?? Sinon, cela peut-il être fait d'une autre manière ??
P.S: J'utilise MS SQL Server
Vous pouvez essayer de faire une table de modification. Si cela échoue, faites ceci:
ALTER TABLE tableName ADD newCol int;
UPDATE tableName SET newCol = CAST(oldCol AS int) FROM tableName;
Cela n'est possible que lorsque votre colonne n'a aucune valeur ou est vide. Si votre colonne a une valeur qui a la valeur nvarchar et que vous devriez essayer de la convertir en int, cela donnera une erreur.
ALTER TABLE [table_name] ALTER COLUMN [column_name] [data_type]
Cela a fonctionné pour moi (avec des décimales mais je suppose que cela fonctionnera avec des ints):
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
Peut être fait encore plus simplement en seulement 2 étapes
Mettez à jour la colonne et définissez toutes les valeurs non numériques sur null afin que alter n'échoue pas.
Modifiez le tableau et définissez le type sur 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
Cela suppose que les colonnes autorisent des valeurs NULL. Si ce n'est pas le cas, cela doit également être traité. Par exemple: en modifiant la colonne pour autoriser la valeur null, puis après la conversion en int, définissez toutes les valeurs NULL sur 0 et modifiez le tableau pour ne pas autoriser la valeur NULL.
Pouvez-vous essayer cela?
alter table MyTable add MyColNum Varchar(500) null;
alter table MyTable add MyColNum int null;