Имя: Пароль:
1C
1С v8
v8: Ошибка переполнения SQL в запросе при преобразовании значения
0 Stim
 
05.08.13
17:34
Ошибка: Ошибка при выполнении операции над данными: Microsoft OLE DB Provider for SQL Server: Arithmetic overflow error converting numeric to data type numeric. HRESULT=80004005, SQLSrvr: SQLSTATE=22003, state=8, Severity=10, native=8115, line=1

Данная ошибка возникает при попытке округления результата деления через функцию ВЫРАЗИТЬ()

текст запроса: ... ; ВЫБРАТЬ ВремТабл.Числ КАК Числитель, ВремТабл.Знам КАК Знаменатель, ВремТабл.Числ/ВремТабл.Знам КАК Частное, ВЫРАЗИТЬ(ВремТабл.Числ/ВремТабл.Знам как Число(10,2)) КАК ЧастноеОкр//здесь ошибка. Если разр указать выше (10,1) -выдается ошибка сабжа.

при этом знаменатель всегда отличен от нуля(условие в самой врем таблице), числ может быть равен нулю. Но даже если числ равен 0, то выразить (0 как число(10,2)) - выдает 0, без всякой ошибки..
1 Stim
 
05.08.13
17:35
Ошибка:
Ошибка при выполнении операции над данными: Microsoft OLE DB Provider for SQL Server: Arithmetic overflow error converting numeric to data type numeric. HRESULT=80004005, SQLSrvr: SQLSTATE=22003, state=8, Severity=10, native=8115, line=1

Данная ошибка возникает при попытке округления результата деления через функцию ВЫРАЗИТЬ()

текст запроса: .
..
;
ВЫБРАТЬ ВремТабл.Числ КАК Числитель,
ВремТабл.Знам КАК Знаменатель,
ВремТабл.Числ/ВремТабл.Знам КАК Частное,
ВЫРАЗИТЬ(ВремТабл.Числ/ВремТабл.Знам как Число(10,2)) КАК ЧастноеОкр//здесь ошибка. Если разр указать выше (10,1) -выдается ошибка сабжа.

при этом знаменатель всегда отличен от нуля(условие в самой врем таблице), числ может быть равен нулю. Но даже если числ равен 0, то выразить (0 как число(10,2)) - выдает 0, без всякой ошибки..
2 pessok
 
05.08.13
17:36
а точно и числитель и знаменатель - числа. строка нигде не могла затесаться?
3 МихаилМ
 
05.08.13
17:36
методом вилки найдите ошибочную строчку
4 Stim
 
05.08.13
17:38
(2) точно. Число(10,1) обрабатывает без проблем
5 Stim
 
05.08.13
17:38
(3) какое условие для вилки?
6 pessok
 
05.08.13
17:38
ну тогда в MSDN :)
7 МихаилМ
 
05.08.13
17:40
(5)
первая половина записей ТЗ, если работает - вторая
8 pessok
 
05.08.13
17:41
9 Stim
 
05.08.13
17:42
(7) этих записей там легион..
10 МихаилМ
 
05.08.13
17:45
(9)
сходимость алгоритма LG(легион)

кстати ошибка должна быть и без выразить.

обрабатывать данные пересылкой на субд очень дурной тон программирования.
для этого прекрасно подходит скд.
11 pessok
 
05.08.13
17:45
http://www.sql.ru/forum/328810/help-arithmetic-overflow-error-converting-numeric-to-data-type-numeric

Всем спасибо, причина найдена.
А причина в данных... в одной из 10 000 строк поле Margin оказалось равным 90 000 000 % :) в общем проблема таки в переполнении.
12 pessok
 
05.08.13
17:45
(10) плюсую, вычисляемые поля решают большинство таким проблем
13 МихаилМ
 
05.08.13
17:46
+(10) точнее log2 (легион)
14 Stim
 
05.08.13
17:57
Читаю статью про округления в запросе. Там оказывается целая наука..
15 МихаилМ
 
05.08.13
18:17
(14)
округления не причем
16 Stim
 
05.08.13
23:02
еще есть варианты?
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший