Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

int overflow

Posted on 2001-08-23
2
Medium Priority
?
698 Views
Last Modified: 2012-06-27
Hi folks,

i have a proxy server logging to MMSSQL table.  i want to summarise the traffic each day to total per IP address.  i use this stored proc:

CREATE PROCEDURE update_TrafficLog @day int = 0

AS

insert into TrafficLog
select clientIP, convert(smalldatetime,convert(char, logtime,101),101), sum(bytessent) as bytesDelivered, 'proxy', 'proxy', newid()
from mspSrvLog
where logtime < convert(smalldatetime,convert(char, dateadd(d, -@day, getdate()),101),101) and logtime >= convert(smalldatetime,convert(char, dateadd(d, -1-@day, getdate()),101),101)
group by clientIP, convert(smalldatetime,convert(char, logtime,101),101)

delete mspsrvlog where logtime < convert(smalldatetime,convert(char, dateadd(d, -1-@day, getdate()),101),101)
GO

the column 'bytessent' is type int

the destimation column for sum(bytessent) is type bigint.

but sometimes this happens when i run the storedproc above:

Server: Msg 8115, Level 16, State 2, Procedure update_TrafficLog, Line 5
Arithmetic overflow error converting expression to data type int.
The statement has been terminated.

(0 row(s) affected)

- i assume that this is caused by the statement sum(bytessent) evaluating to a value greater than max INT - which being 2,147,483,647 is only 2.15GB, and not unlikely that this much data would be delivered to one address in a given day....

so how can i evaluate the sum(bytessent) as bigint?

cheers!


0
Comment
Question by:meverest
2 Comments
 
LVL 39

Accepted Solution

by:
appari earned 300 total points
ID: 6420633
try the following

insert into TrafficLog
select clientIP, convert(smalldatetime,convert(char, logtime,101),101), sum( convert(numeric,bytessent)) as bytesDelivered,
'proxy', 'proxy', newid()
from mspSrvLog
where logtime < convert(smalldatetime,convert(char, dateadd(d, -@day, getdate()),101),101) and logtime
>= convert(smalldatetime,convert(char, dateadd(d, -1-@day, getdate()),101),101)
group by clientIP, convert(smalldatetime,convert(char, logtime,101),101)

delete mspsrvlog where logtime < convert(smalldatetime,convert(char, dateadd(d, -1-@day, getdate()),101),101)
0
 
LVL 37

Author Comment

by:meverest
ID: 6420815
thanks for that.  the convert function did the trick - but i chose to convert to bigint....  is there some advantage for using numeric datatype?

regards.
0

Featured Post

Get your Conversational Ransomware Defense e‑book

This e-book gives you an insight into the ransomware threat and reviews the fundamentals of top-notch ransomware preparedness and recovery. To help you protect yourself and your organization. The initial infection may be inevitable, so the best protection is to be fully prepared.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

One of the most important things in an application is the query performance. This article intends to give you good tips to improve the performance of your queries.
This month, Experts Exchange sat down with resident SQL expert, Jim Horn, for an in-depth look into the makings of a successful career in SQL.
Familiarize people with the process of utilizing SQL Server functions from within Microsoft Access. Microsoft Access is a very powerful client/server development tool. One of the SQL Server objects that you can interact with from within Microsoft Ac…
Viewers will learn how the fundamental information of how to create a table.

885 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question