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

时间:2013-08-28 06:07:44

标签: sql-server type-conversion alter-table

字段的数据类型是否可以从nvarchar ??

更改为int
alter table employee alter column designation int

这是有效的?如果没有,可以用其他方式完成吗?

P.S:我正在使用MS SQL Server

6 个答案:

答案 0 :(得分:17)

你可以尝试做一个alter table。如果失败,请执行以下操作:

  1. 创建一个整数的新列:
  2. ALTER TABLE tableName ADD newCol int;

    1. 从旧列中选择新数据:
    2. UPDATE tableName SET newCol = CAST(oldCol AS int) FROM tableName;

      1. 删除旧列

答案 1 :(得分:10)

仅当列没有值或空白时才可能。如果您的列具有某个具有nvarchar值的值,并且您应该尝试将其转换为int,则会出错。

ALTER TABLE [table_name] ALTER COLUMN [column_name] [data_type]

答案 2 :(得分:5)

  1. 添加新的数字列。
  2. 从旧的char列复制到带有修剪和转换的新列。
  3. 删除旧的char列。
  4. 将数字列重命名为旧列名称。
  5. 这对我有用(带小数但我想它可以用于整数):

    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
    

答案 3 :(得分:3)

只需两步就可以做得更简单

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

  2. 更改表格并将类型设置为int。

  3. 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之后,将所有空值设置为0并将表更改为不允许null

答案 4 :(得分:2)

  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;

答案 5 :(得分:0)

你能试试吗?

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