更新列时将数据类型varchar转换为数字时出错

时间:2016-09-28 14:36:36

标签: sql sql-server database sql-server-2008

update policy
    set EstimatedPremium =  cast(etl.estpremium as Numeric(19,4)) 
    from policy p join
         etlpolicy etl
         on p.policynumber = etl.policynumber

我正在尝试从表policy中的另一列更新一个表etlpolicy中的列。在目标列中,数据类型为Numeric(19,4),源列为varchar(20)。

我收到消息:

  

将数据类型varchar转换为float

时出错

有人能告诉我我做错了吗?

2 个答案:

答案 0 :(得分:0)

您的查询没问题,update除外。您需要使用表别名:

update p
-------^
    set EstimatedPremium =  cast(etl.estpremium as Numeric(19,4)) 
    from policy p join
         etlpolicy etl
         on p.policynumber = etl.policynumber;

答案 1 :(得分:0)

您可以检查第二个表(etlpolicy)上的值是否都可以转换为数字?

另外:他们是否根据您的文化使用正确的小数分隔符? 例如:" 1.950,00"可能会因环境而变得复杂。

你可以:

select cast(etl.estpremium as Numeric(19, 4)) prm
from etlpolicy etl

甚至,我相信SQL Server具有IsNumeric功能(我还没有经过测试):

select IsNumeric(etl.estpremium) prm, etl.estpremium
from etlpolicy etl

对于非数字值,它应返回0。