SQL Server:将一个表中的nvarchar值插入另一个表的int列

时间:2017-04-18 15:17:18

标签: sql sql-server

我有两个表(表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

非常感谢任何帮助!

1 个答案:

答案 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之类的字符串直接转换为整数将导致错误。