如何将我的float字段转换为sql server中的Decimal?

Goo*_*ows 1 sql sql-server

我想将我的浮点字段转换为十进制字段; 我希望在我的十进制字段中精度为11,2但是当我尝试更改我的字段类型时(例如:Amount)我得到一个错误:"算术溢出错误将float转换为数据类型numeric.语句已被终止".我的字段在表中是十进制(11,2),我的最大值和最小值是:1,603,837,393.70 < - > -1,688,000,000.00(金额).

我创建了一个临时表来取出数据并更改了我的字段的结构,并且工作正常但现在我需要将数据放回去(临时表仍然具有原始浮点字段),而我只是简单地无法使其插入带有insert select语句的值.

由于我的值不超过我的类型的范围,我想知道为什么甚至不可能在这样的select语句上强制转换:

select Id,AccountId, cast(Amount as decimal(12,2)) as Amount,
cast(AmountB as decimal(12,2)) as  AmountB
FROM myTable
Run Code Online (Sandbox Code Playgroud)

我无法确定不转换我的领域的原因.

mar*_*c_s 5

但是值"1,603,837,393.70"将需要十进制(12,2) - 总共12位,小数点后2位.

也许你误解了decimal(11,2)作品的方式?这意味着总共11位数 - 左边9,小数点右边2.

有关十进制和数字类型,请参阅MSDN文档:

十进制[(p [,s])]和数字[(p [,s])]

p(精度)

小数点左侧和右侧可存储的最大小数位数.