2016-02-13 28 views
0

一家公司正在更改他们的数据库系统,并且我负责准备数据从源数据库转到目标数据库。其中一个领域需要的是年薪,并且将从货币数据类型转换为格式“99999.999999”的数据类型。TSQL我不明白算术溢出错误将货币转换为数值

我假设类似下面的工作。它首先检查该人是否是小时,然后放入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

尝试数字(11,6)。有可能AnnlSal值不适合十进制(11,6)。尝试在AnnlSal上运行MAX()和MIN() – IgorM

+0

@IgorM Nope,同样的错误:/ –

+0

@ JCark4321,您是否尝试在AnnlSal上运行MAX()和MIN()? – IgorM

回答

2

当您使用decimal(11,6),你的成绩不能超过$ 99,999.999999的年薪。如果其中一个结果达到100,000美元或更高(100000.000000),则会引发溢出错误。

尝试使用少数精度点。也许decimal(11,3)这应该足够年薪了。

+0

啊,你知道是什么,这是问题。我被给了一个测试数据库来对付,其中一个薪水是数百万美元。我已经问过“如果”的问题,但认为转换错误是由于我的代码不是一个很大的薪水值。不介意我,我迟到了:) –

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) 
+0

很确定它是从第二个 – IgorM

相关问题