sql - 成功执行后出现错误:将表达式转换为数据类型 int 的算术溢出错误
问题描述
我正在阅读一篇关于如何巧妙地使用 sql 查询的 sql 文章,我得到了下面的文章,它正在计算阶乘,它适用于数字 5,但是当我更改为另一个大于 12 的数字时,它会推送错误:消息 8115,级别 16,状态 2,第 1 行将表达式转换为数据类型 int 的算术溢出错误。我认为 12 是数字 <=5 的总和,即 5 4 3 2 波纹管查询适用于所有 num<12 但是当我将 num 更改为大于 12 时,即使我更改条件“num < "
with fact as (
select 1 as fac, 1 as num
union all
select fac*(num+1), num+1
from fact
where num<12)
select fac
from fact
where num=5
解决方案
您的代码有点奇怪 - 计数然后使用外部where
停止。
我只会输入一个数字并倒数。如果你使用decimal(38, 0)
,你可以走得更高:
with fact as (
select cast(1 as decimal(38, 0)) as fac, 33 as num
union all
select fac * num, num - 1
from fact
where num > 0
)
select max(fac)
from fact;
这将返回 8,683,317,618,811,886,495,518,194,401,280,000,000。对于大多数实际应用来说,这似乎足够大。
推荐阅读
- excel - 如果用户没有写访问权限,则替代 Dir() 检查网络文件是否存在
- azure - 使用身份验证托管的 Blazor Wasm 上出现 Azure 500 错误
- trello - 从 Trello API 更新电源的字段
- sql-server - SQL Server 在 > 4000 个字符时截断 nvarchar(max)
- c# - 如何使用较新的框架引用或复制其他 C# 项目的输出?
- sql - 如何从特定日期提取数据并一切正常?
- android - 片段内的 Glide 未下载图像
- c# - 当行数超过 3000 时,C# Excel Interop 处理时间过长
- xcode - macOS 11.1 不支持 XCode 模拟器运行时
- arrays - 如何移动二维数组中的值而不在 C 中的数组中创建移位