繁体   English   中英

SQL将列数据类型从nvarchar更改为int

[英]SQL alter column datatype from nvarchar to int

可以将字段的数据类型从nvarchar更改为int吗?

alter table employee alter column designation int

这有效吗? 如果不能,可以通过其他方式完成吗?

PS:我正在使用MS SQL Server

您可以尝试做一个变更表。 如果失败,请执行以下操作:

  1. 创建一个新的整数列:

ALTER TABLE tableName ADD newCol int;

  1. 从旧列中选择数据到新列中:

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

  1. 删除旧列

仅当您的列没有值或空白时才有可能。 如果您的列具有一些具有nvarchar值的值,并且您应尝试将其转换为int,它将给出错误信息。

ALTER TABLE [table_name] ALTER COLUMN [column_name] [data_type]
  1. 添加新的数字列。
  2. 通过修剪和转换从旧的char列复制到新列。
  3. 删除旧字符列。
  4. 将数字列重命名为旧列名。

这对我有用(带小数点,但我想它将与整数一起工作):

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

只需2个步骤即可完成

  1. 更新该列并将所有非数字值设置为null,这样alter不会失败。

  2. 更改表并将类型设置为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

假设列允许空值。 如果没有,那也需要处理。 例如:通过将列更改为允许null,然后将其转换为int之后,将所有null值设置为0,并将表更改为不允许null

  1. 创建一个临时列

    ALTER TABLE MYTABLE ADD MYNEWCOLUMN NUMBER(20,0) NULL;

  2. 将数据从旧列复制并转换为新列

    UPDATE MYTABLE SET MYNEWCOLUMN=CAST(MYOLDCOLUMN AS NUMBER(20,0));

  3. 删除旧列

    ALTER TABLE MYTABLE DROP COLUMN MYOLDCOLUMN;

  4. 重命名新名称,使其与旧名称相同。

    ALTER TABLE MYTABLE RENAME COLUMN MYNEWCOLUMN TO MYOLDCOLUMN;

你可以试试这个吗?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM