我有两个表(表A和表B),它们具有相同的列名和结构。由于需求更改,我被要求在表A中将其中一列的数据类型从nvarchar更改为int。我已将数据类型更改为int并丢失所有值,因为我使用的是IsNumeric。现在,我尝试将表B(nvarchar)中的值插入表A(int),以根据匹配的ID替换所有丢失的值。
我在下面尝试过,但收到了转化错误:
insert into TableA([Percentage] )
select CAST(Percentage] as int)
from TableB
where ID in (select ID] from TableA)`
我在tableB上的输入值是这样的: VARCHAR:
0.1
0.05
1
0
但我想在TableA中使用这样的值(乘以100): INT:
10
5
100
0
非常感谢任何帮助!
答案 0 :(得分:3)
我想你想要update
,而不是insert
?无论如何,这并不重要。在SQL Server 2012+中,您应该使用try_convert()
。
我想你想要:
update a
set Percentage = floor(100 * try_convert(decimal(10, 4), b.Percentage) )
from TableA a join
TableB b
on a.id = b.id;
请注意,这首先转换为定点十进制数,然后将该值转换为整数。将1.00
之类的字符串直接转换为整数将导致错误。