发送“成本”列中的所有值所需的精度“39”超过了支持的最大精度“38”。这些值必须全部适合单个精度

Precision '39' required to send all values in column 'Cost' exceeds the maximum supported precision '38'. The values must all fit in a single precisi

提问人:user2929811 提问时间:10/20/2022 最后编辑:jarlhuser2929811 更新时间:10/20/2022 访问量:197

问:

我找到了一个类似的帖子,但没有实际的解决方案。谁能帮我解决这个问题?

我有一个 .Net DataTable,其中有一列 Decimal 类型。数据表将传递给 SQL Server 存储过程,以便作为 SQLClient.SQLCommand 上的表值参数进行处理。参数类型为“表类型”,其中列类型为“money”

多年来,我一直使用这种技术处理了数十亿行。

然而,今天,有了这个简单的数据,我得到了上面的错误。奇怪的是,如果我单独甚至小批量处理它们,它们都有效,但不是整体? 我确实尝试将表类型更改为浮点数和十进制(26,6),但出现了同样的错误

123456789123.45 123456789123.124 123456789123.123 2735.132217 2598.375606 2598.375606 431.8629817 434.0222966 434.0222966 1583.497599 1747.7364 1747.7364 1936.483346 1936.483346 58.09450039



4841.208366 174.2835012


174.2835012







193.6483346



19.36483346
29.04725019
38.72966692

当我的系统出现故障时,任何帮助将不胜感激。

sql .net sql-server 数据表 精度

评论

1赞 Bohemian 10/21/2022
这些值都可以轻松放入十进制(26,6)中,所以也许这不是问题;SP 对这些值做了什么?难道是这些值在某处求和,而所有的总和不适合 26,6?
2赞 Scott Mildenberger 10/21/2022
您不显示任何代码。我猜问题出在存储过程中 - 它可能正在计算“成本”列的值。您可能需要进行一些显式强制转换,以避免出现不允许的精度的隐式强制转换。尝试通过 SSMS 中的存储过程运行相同的数据,以查看问题是否仍然存在,如果是,则发布过程代码。
0赞 user2929811 10/21/2022
感谢您的反馈。我不认为它进入了它在 SqlCommand.ExecuteCommand 上失败的过程。另一端的 sproc 只是执行此 SET ANSI_WARNINGS OFF DROP TABLE IF EXISTS [ExtractRepository].dbo。[BudgetItemCostDetal]SELECT * INTO [ExtractRepository].dbo.[预算项目成本详细信息]FROM @BudgetItemCostDetail 重复一遍,只有当所有这些值都存在时,它才会失败。
3赞 Stuck at 1337 10/21/2022
必须更贴近故事;我无法复制
0赞 Community 10/21/2022
请提供足够的代码,以便其他人可以更好地理解或重现问题。

答: 暂无答案