例如对于列(xx),其中数据类型是varchar并且在其中具有值,例如'cons','alts'将其转换为int ... 如果不可能这样做我们有什么其他选择
答案 0 :(得分:0)
更新后的值。像这样:
update t
set column = NULL
where column not like '%[^0-9]%' or column not like '-[^0-9]%';
alter t alter column int;
一旦值有效,您应该能够修改类型,假设列上有许多其他条件(涉及在约束中使用等)。
编辑:
如果要创建引用表,通常会添加新列。这很糟糕,因为列重新排序。所以,你可以使用这个hack:
create table columnRef (
columnRefId int not null identity primarykey,
value varchar(255) unique
);
insert into columnRef(value)
select distinct column from t;
alter table t add newvalue varchar(255);
update t newvalue = column;
update t
column = cast(columnRefId as varchar(255))
from t join
columnRef cr
on t.newvalue = cr.value;
alter t modify column int;
alter t drop newvalue;
写完这篇文章后,我意识到你不需要newvalue
。但是,不知怎的,我很难修改用于join
的列中的数据,并且之后无法检查其准确性。