Главная страница | назад





Article #19505: Sybase / MSSQL ARITHABORT ON and "Divide by zero occurred." error.

 Question and Answer Database

     FAQ: FAQ4505B - Sybase /  MSSQL ARITHABORT ON and "Divide by zero occurred." error.
Category: Database (Sybase)
Platform: All-32Bit
 Product: All-CBuilder,   BC++5.x,   C++Builder1.0,   C++Builder3.x,   C++Builder4.x,   Delphi2.x,   Delphi3.x,   Delphi4.x,   VdBase7.x,   

Question:

Why doesn't the Sybase SQL Link driver raise an error when a
"Divide by zero" error occurs on the server?


Answer:

The MSSQL and Sybase SQL Links drivers do not raise server errors
with severity levels 10 and below for the reasons explained below.

Setting ARITHABORT ON should change the severity level of arithmetic
errors (see below).

With MSSQL Server "ARITHABORT ON" appears to change the severity 
level of the "Divide by zero" error from 10 to 16 whereas Sybase
does not change its level from 10 (as expected the underlying 
Sybase server behavior does change though).

Both the MSSQL and Sybase documentation describe severity levels 
the same way (see below).

MSSQL descriptions for levels 0 through 16:

Severity Level 0 and 10: Status Information (Reported as Level 0)
These messages are not errors; they provide additional 
information after certain statements have executed. 
[errors with levels 0 or 10 are not raised by the BDE]

Severity Levels 11 through 16
These messages indicate errors that can be corrected by the 
user.


Sybase:
-------------------------------------------

set arithabort on
select 1/0

Server Message:  Number  3607, Severity  10
Divide by zero occurred. 
(0 rows affected)

-------------------------------------------
set arithabort off
select 1/0

Server Message:  Number  3621, Severity  10
Command has been aborted. 
(0 rows affected)



MSSQL:
-------------------------------------------

set arithabort off
select 1/0


(null)      

(1 row(s) affected)

Divide by zero occurred.

This error is documented as being
Error: 3607   
Severity Level: 10  
Description: Divide by zero occurred.

-------------------------------------------
set arithabort on
select 1/0

Msg 8134, Level 16, State 1
Divide by zero error encountered


7/13/99 10:54:39 AM
 

Last Modified: 01-SEP-99