web-dev-qa-db-fra.com

SQL modifie le type de données de la colonne de nvarchar à int

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 

13
Mohit Jain

Vous pouvez essayer de faire une table de modification. Si cela échoue, faites ceci:

  1. Créez une nouvelle colonne qui est un entier:

ALTER TABLE tableName ADD newCol int;

  1. Sélectionnez les données de l'ancienne colonne dans la nouvelle:

UPDATE tableName SET newCol = CAST(oldCol AS int) FROM tableName;

  1. Déposer l'ancienne colonne
17
dcaswell

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]
10
S. S. Rawat
  1. Ajouter une nouvelle colonne numérique.
  2. Copier de l'ancienne colonne de caractères vers la nouvelle colonne avec ajustement et conversion.
  3. Déposez l'ancienne colonne de caractères.
  4. Renommez la colonne numérique en ancien nom de colonne.

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
5
Alexandr

Peut être fait encore plus simplement en seulement 2 étapes

  1. Mettez à jour la colonne et définissez toutes les valeurs non numériques sur null afin que alter n'échoue pas.

  2. 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.

3

Pouvez-vous essayer cela?

alter table MyTable add MyColNum Varchar(500) null;
alter table MyTable add MyColNum int null;
0
Suresh