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
时出错
有人能告诉我我做错了吗?
答案 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。