Comment résoudre Msg 8115, niveau 16, état 2, ligne 2 erreur de dépassement arithmétique conversion d'expression en type de données int.?

J'ai une formule comme celle-ci. Mais la formule a une erreur. Aidez-moi, s'il vous plaît.

select [DAY] as [DAY], [Name] as [Name], ((cast([columnA] + [columnB] + [columnC] as bigint) * 1000) / NULLIF(8 * 1024 * 1048576, 0)) as [TotalColumn] from [TableA] 

Message d'erreur:

Msg 8115, niveau 16, état 2, ligne 2
Erreur de dépassement arithmétique lors de la conversion de l'expression en type de données int.

Je ne suis pas sûr de ce que vous essayez de votre côté, mais vous pouvez utiliser le type de données NUMERIC car les résultats peuvent contenir des décimales.

 select 'Monday' as [DAY], 'Septiana Fajrin' as [Name], ((cast('5' + '5' + '5' as Numeric) * 1000) / (convert(Numeric, 8) * 1024 * 1048576))as [TotalColumn] 

Résultat

 DAY Name TotalColumn Monday Septiana Fajrin 0.000064610503613 

Puisque votre dividende est un bigint je soupçonne que vous aurez besoin du diviseur pour être aussi un bigint. Puisque vous avez des littéraux entiers, les maths vont essayer de mettre cela dans un int et c'est trop grand. Vous pouvez cependant forcer le diviseur à être un bigint.

 convert(bigint, 8) * 1024 * 1048576