SQL 错误 nvarchar 值的转换'4678444992'溢出了 int 列



有人能帮我解决INT 的这个问题吗

Select 
Location, Population, 
MAX(total_cases) AS HighestInfectionCount,  
MAX((total_cases / population)) * 100 AS PercentPopulationInfected
From 
.CovidDeaths
--Where location like '%states%'
Group By 
Location, Population
Order By 
PercentPopulationInfected desc

我收到这个错误

nvarchar值"4678444992"的转换溢出了int列

SQL Server中可以放置在integer列类型中的最大整数值为2147483647。所以你已经超过了它的价值两倍以上。

SQL本身是可以的,它的结果可以由服务器计算和显示,没有任何问题,但很明显,您正试图将此结果插入到另一个具有int列的表中。

因此,由于超过而无法插入值,因此会出现此错误。在这种情况下,您可以在目标表中创建新的列类型Bigint,从旧的int列复制所有数据,重命名旧列,然后用最后一列的原始名称重命名新列。Phew((现在,如果一切都好,你可以放弃旧的列

UPD

我之前的回答是关于一种情况,当所有数据都是数字时,尽管如此,它还是很有用的,因为这种奇怪的计算不能保证结果不会插入到具有int列的某个目标表中。

说到解决方案,您必须在请求中投射大的伪数字

Select 
Location, Population, 
MAX(total_cases) as HighestInfectionCount,  
MAX((cast(total_cases as bigint)/population)) * 100 as PercentPopulationInfected
From 
.CovidDeaths
--Where location like '%states%'
Group By
Location, Population
Order By 
PercentPopulationInfected desc

IMHO隐式转换是有史以来最糟糕的事情

最新更新