公司正在更改其数据库系统,我负责准备从源数据库到目标数据库的数据。其中一个字段是年薪,从money数据类型转换为格式为“99999.999999”的数据类型。
我认为下面的内容会起作用。它首先检查该人是否是每小时,然后输入0.否则,使用AnnlSal列并格式化为6点精度。
UPDATE #SalaryInfo
SET AnnSalary = (SELECT CASE WHEN SalaryorHourly = 'H' THEN CONVERT(decimal(11,6), 0)
ELSE CONVERT(decimal(11,6), AnnlSal)
END
FROM <table>
WHERE <table>.Emp = #SalaryInfo.EmpNo
这给了我“将钱转换为数据类型数字的算术溢出错误”。我看到This SO answer,但我不明白我为什么还有问题。
感谢您的时间!
答案 0 :(得分:3)
当您使用decimal(11,6)
时,年薪的结果不能超过$ 99,999.999999。如果您的某个结果达到$ 100,000或以上(100000.000000
),则会抛出溢出错误。
尝试使用少量精度。也许decimal(11,3)
应该足以支付年薪。
答案 1 :(得分:0)
不确定第一个或第二个CONVERT是否产生错误。请尝试以下跟踪它。传入数据中可能为空:
SET AnnSalary = (SELECT
CASE WHEN SalaryorHourly = 'H' THEN 0
ELSE CONVERT(decimal(11,6), AnnlSal)
END
FROM <table>
WHERE <table>.Emp = #SalaryInfo.EmpNo)