Msg 8115 Arithmetic overflow error

Ha a webalkalmazásunkba feltöltött fájlokról SQL táblában tárolunk meta információkat, akkor általában a fájl méretét tároló oszlopnál beérjük a klasszikus int adattípussal. Az int T-SQL-ben 4 bájtos, tehát nagyjából 2 GB-os fájlok leírására lesz így képes az alkalmazásunk, ennél nagyobbat nem szoktak feltölteni a felhasználók. Ha jól megy az webhely és a felhasználók töltögetnek rendesen, akkor egy idő után azonban könnyen belefuthatunk ebbe a hibaüzenetbe:

  Msg 8115, Level 16, State 2, Line 12
  Arithmetic overflow error converting expression to data type int.

Az egészben az az érdekes, hogy egy olyan utasításról van szó, ami korábban működött, most viszont elröppen. A hibaüzenetben a kulcsszó az overflow, azaz kiléptünk az int határaiból. Ez hogyan fordulhat elő? Például úgy, hogy a kódban van egy ehhez hasonló utasítás:

  SELECT Sum(FileSize) FROM...

Ez egészen addig nem fog gondot okozni, amíg az összes fájl együttes mérete el nem éri a 2GB-ot. Tehát nem egy fájl a gond, hanem az összes együtt! A Sumot ugyanis ha inttel etetjük, akkor intet is akar kiköpni magából, de ha az eredmény nem fér bele az int értéktartományába, hanem megakad a torkán.

A megoldás nagyon egyszerű, durvuljunk:

  SELECT SUM(CAST(FileSize AS bigint)) FROM...

Csak az a kár, hogy előre kellene gondolni rá…

Technorati-címkék: ,
Reklámok

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s