TSQL我不明白算术溢出错误将货币转换为数字

时间:2016-02-13 22:31:40

标签: sql sql-server tsql type-conversion

公司正在更改其数据库系统,我负责准备从源数据库到目标数据库的数据。其中一个字段是年薪,从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,但我不明白我为什么还有问题。

感谢您的时间!

2 个答案:

答案 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)