17

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

alter table employee alter column designation int

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

PS:我正在使用MS SQL Server

4

6 回答 6

22

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

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

ALTER TABLE tableName ADD newCol int;

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

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

  1. 删除旧列
于 2013-08-28T06:15:12.977 回答
14

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

ALTER TABLE [table_name] ALTER COLUMN [column_name] [data_type]
于 2013-08-28T07:20:13.220 回答
5
  1. 添加新的数字列。
  2. 使用修剪和转换从旧 char 列复制到新列。
  3. 删除旧的 char 列。
  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
于 2014-12-15T05:17:34.380 回答
4

只需 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

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

于 2015-05-06T10:30:47.890 回答
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;

于 2016-11-30T15:04:10.163 回答
0

你能试试这个吗?

alter table MyTable add MyColNum Varchar(500) null;
alter table MyTable add MyColNum int null;
于 2018-01-18T05:32:59.203 回答