Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Shocker.Pro Member Откуда: ->|<- :адуктО Сообщений: 22201 |
Есть некий сводный запрос, довольно насыщенный, с учетом представлений и инлайновых функций включает в себя три десятка таблиц, отбирает три десятка полей. При некоторых интервалах дат отбора (как правило больших) при выполнении запроса возникает ошибка деления на ноль, при этом Помимо просто визуального анализа, это подтверждается тем, что, к примеру, я могу сделать выборку по отдельности за июль и за август, но не получается сделать одновременно с июля по август. Попытка локализовать проблему путем постепенного убирания из запроса полей выборки или таблиц не приводит к успеху, так как в какой-то момент план запроса меняется и ошибка пропадает. То есть, скажем, первая половина полей выборки и вторая половина полей выборки отбираются нормально, а вместе - никак. То же и с таблицами. То есть деление на ноль возникает не в самом запросе, а где-то глубже (в оптимизаторе, я не знаю, в обработке индексов...) Я буду дальше сам ковырять-искать, пока рассчитываю на шальной ответ типа "о, я с таким сталкивался, проблема была с ...". MSSQL 2000 SP4 |
1 апр 15, 11:31 [17458228] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47047 |
Shocker.Pro, оператор деления в запросе есть? |
1 апр 15, 11:40 [17458313] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
вы перечислили то, где оно точно не возникает. ищите деление у себя, если не в самом запросе, то в функциях/вьюхах |
||
1 апр 15, 11:41 [17458319] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Ага, например, в куче " представлений и инлайновых функций " |
||
1 апр 15, 11:41 [17458322] Ответить | Цитировать Сообщить модератору |
Shocker.Pro Member Откуда: ->|<- :адуктО Сообщений: 22201 |
Все операторы деления закрыты /NULLIF(n,0) Опять же, как я говорил, все выборки работают, если делать их по частям, то есть проблема не в том, что деление на ноль возникает именно в выборке. |
1 апр 15, 11:41 [17458326] Ответить | Цитировать Сообщить модератору |
SQL2008 Member Откуда: Москва Сообщений: 4392 |
Выделите из общего запроса кусок, который и дает ошибку и запостите сюда
С вашим запросом здесь ранее никто не работал. |
||
1 апр 15, 11:42 [17458332] Ответить | Цитировать Сообщить модератору |
Shocker.Pro Member Откуда: ->|<- :адуктО Сообщений: 22201 |
То есть не работает вся эта громадина целиком, выкладывать ее всю бессмысленно.
|
||||
1 апр 15, 11:46 [17458365] Ответить | Цитировать Сообщить модератору |
SQL2008 Member Откуда: Москва Сообщений: 4392 |
Пример в студию! |
||
1 апр 15, 11:48 [17458385] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Серверное исключение о делении на 0 возникает при делении на 0 А не при построении плана или какой то обработке индекса |
||
1 апр 15, 11:48 [17458387] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
может, есть вьюха, где есть отбор с условием <> 0. при выборке только из нее все хорошо. потом вы соединяете ее еще с чем-то и там делите что-то на эти вроде бы ненулевые значения из вьюхи. а он так соптимизировал, что сначала делит, потом фильтрует. короче, ищите вообще все возможное деление |
1 апр 15, 11:49 [17458392] Ответить | Цитировать Сообщить модератору |
daw Member Откуда: Муром -> Москва Сообщений: 7381 |
> Все операторы деления закрыты /NULLIF(n,0) значит, не все. ищите. > Опять же, как я говорил, все выборки работают, если делать их по частям, то есть проблема не в том, что деление на ноль возникает именно в выборке. ну, вы же, вроде бы, понимаете, что это ни о чем. в общем запросе меняется порядок выполнения операторов плана, вот и пропадает. а потенциально оно где-то есть, все-таки. |
1 апр 15, 11:50 [17458414] Ответить | Цитировать Сообщить модератору |
SQL2008 Member Откуда: Москва Сообщений: 4392 |
Максимально сузьте диапазон, при котором выдается ошибка. Чудес не бывает. |
||
1 апр 15, 11:51 [17458416] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47047 |
Shocker.Pro, Может, Вы полагаете, что, например, условие в WHERE отбрасывает все нулевые значения в знаменателях полей SELECTа, и поэтому такая ошибка невозможна. На эти грабли очень часто наступают. Тогда ответ будет простым: сервер сам решает, сначала отбрасывать записи, не удовлетворяющие WHERE, а потом формировать результирующий датасет или поступить наоборот. Во втором случае обычно как раз и удивляются ошибкам преобразования и деления на ноль, хотя WHERE якобы все такие строки "должен был отбросить". Не, не то? ![]() |
1 апр 15, 11:53 [17458437] Ответить | Цитировать Сообщить модератору |
SQL2008 Member Откуда: Москва Сообщений: 4392 |
Shocker.Pro, ну все! Интрига достигла эпогея. Постите уже сюда свой запрос. Сделайте только в тэге SRC, please! |
1 апр 15, 11:55 [17458454] Ответить | Цитировать Сообщить модератору |
Shocker.Pro Member Откуда: ->|<- :адуктО Сообщений: 22201 |
|
||||||
1 апр 15, 11:56 [17458460] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
![]() ![]() |
||
1 апр 15, 12:00 [17458490] Ответить | Цитировать Сообщить модератору |
SQL2008 Member Откуда: Москва Сообщений: 4392 |
Sorry - Апогея |
1 апр 15, 12:02 [17458507] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Может где то закрался /NULLIF(0,n) ? |
||
1 апр 15, 12:21 [17458631] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8316 |
Именно так! Фильтр может сработать по плану запроса после попытки деления. |
||
1 апр 15, 12:53 [17458855] Ответить | Цитировать Сообщить модератору |
Shocker.Pro Member Откуда: ->|<- :адуктО Сообщений: 22201 |
вопрос решен - спасибо всем за советы и комментарии |
||||||
1 апр 15, 14:17 [17459488] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Неужели таки human errors ? |
||
1 апр 15, 14:20 [17459512] Ответить | Цитировать Сообщить модератору |
Shocker.Pro Member Откуда: ->|<- :адуктО Сообщений: 22201 |
![]() |
||||
1 апр 15, 14:27 [17459541] Ответить | Цитировать Сообщить модератору |
dma_caviar Member Откуда: https://itproduct.ru Сообщений: 2351 |
А у вас в "запросе" нигде в недрах не происходит апдейта или инсерта? Если происходит, тогда тригеры прошерстите. |
1 апр 15, 19:57 [17461458] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |