![]() |
|
Модераторы: Akina |
![]()
|
|
| Fedorenkoda |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 5.8.2002 Репутация: нет Всего: нет |
Уважаемые мастера! Мне необходимо получить итоговый отчет деятельности фирмы, но у меня возникла следующая ситуация.Мой запрос состоит из 2033 строк. И при его выполнении возникает такая ошибка:
Changed language setting to us_english. ODBC: Msg 0, Level 19, State 1 SqlDumpExceptionHandler: Process 12 generated fatal exception c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server is terminating this process. Connection Broken Я не могу понять, что это за ошибка. И если можно помогите пожалуйста оптимизировать запрос,т.к. он содержит много повторяющихся элементов. Вот его кусок: Select 'Абонентная плата','КВС', ((select isnull(sum(p.Summa),0.00) from Client c , Pers_Account p where c.Branch=1 and c.Client=p.Client and p.ServiceType=2 and (p.Period between '07.01.2002' and '08.01.2002'))- (select isnull(sum(p.Summa),0.00) from Client c , Pers_Account p , DEVICENUMBER d where d.Fine>10 and p.Number=d.Number and (c.Branch=1) and c.Client=p.Client and p.ServiceType=2 and (p.Period between '07.01.2002' and '08.01.2002'))), (select isnull(sum(p.Summa),0.00) from Client c , Pers_Account p , DEVICENUMBER d where d.Fine>10 and p.Number=d.Number and (c.Branch=1) and c.Client=p.Client and p.ServiceType=2 and (p.Period between '07.01.2002' and '08.01.2002')),0.00 union all Select 'Абонентная плата','НХС с ндс', ((select isnull(sum(p.Summa),0.00) from Client c , Pers_Account p where c.Client=p.Client and (c.Branch<>1 and c.Branch<>30) and p.ServiceType=2 and (p.Period between '07.01.2002' and '08.01.2002'))- (select isnull(sum(p.Summa),0.00) from Client c , Pers_Account p , DEVICENUMBER d where c.Client=p.Client and p.Number=d.Number and (c.Branch<>1 and c.Branch<>30) and p.ServiceType=2 and d.Fine>10 and (p.Period between '07.01.2002' and '08.01.2002'))), (select isnull(sum(p.Summa),0.00) from Client c , Pers_Account p , DEVICENUMBER d where c.Client=p.Client and p.Number=d.Number and (c.Branch<>1 and c.Branch<>30) and p.ServiceType=2 and d.Fine>10 and (p.Period between '07.01.2002' and '08.01.2002')), ((select isnull(sum(p.Summa),0.00) from Client c , Pers_Account p where c.Client=p.Client and (c.Branch<>1 and c.Branch<>30) and p.ServiceType=2 and (p.Period between '07.01.2002' and '08.01.2002'))- (select isnull(sum(p.Summa),0.00) from Client c , Pers_Account p , DEVICENUMBER d where c.Client=p.Client and p.Number=d.Number and (c.Branch<>1 and c.Branch<>30) and p.ServiceType=2 and d.Fine>10 and (p.Period between '07.01.2002' and '08.01.2002'))+ (select isnull(sum(r.Summa),0.00) from Pers_Account p ,Recalc r,Client c where r.Pers_Account=p.Pers_Account and c.Client=p.Client and p.ServiceType=2 and OperationType in (1,3,5) and (c.Branch<>1 and c.Branch<>30) and (r.RDate between '07.02.2002' and '08.01.2002')))/5 union all Select 'Абонентная плата','НХС без ндс', ((select isnull(sum(p.Summa),0.00) from Client c , Pers_Account p where c.Branch=30 and c.Client=p.Client and p.ServiceType=2 and (p.Period between '07.01.2002' and '08.01.2002'))- (select isnull(sum(p.Summa),0.00) from Client c , Pers_Account p , DEVICENUMBER d where d.Fine>10 and p.Number=d.Number and (c.Branch=30) and c.Client=p.Client and p.ServiceType=2 and (p.Period between '07.01.2002' and '08.01.2002'))), (select isnull(sum(p.Summa),0.00) from Client c , Pers_Account p , DEVICENUMBER d where d.Fine>10 and p.Number=d.Number and (c.Branch=30) and c.Client=p.Client and p.ServiceType=2 and (p.Period between '07.01.2002' and '08.01.2002')),0.00 union all ... Помогите пожалуйста |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 5 Всего: 207 |
1) Повторяющиеся константы определи 1 раз, как переменные, а затем их используй
2) Проследи чтобы были индексы по всем полям, упомянутым в "Where" секции 3) Попробуй упростить кверю (например разбить её по местам где у тебя union на несколько), посмотри проходит ли она в упрощённом виде, затем постепенно усложняй 4) Проверь языковые установки, почему-то ошибка вываливается о языке... -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Keks |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 23.9.2002 Репутация: нет Всего: нет |
Такое же сообщение вываливается у меня при выполнении запроса с full join трех таблиц если в них много строк. При малом числе строк все нормально! Я считаю это просто позорным багом.
|
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 5 Всего: 207 |
Я делал Full Join на десяток таблиц с довольно большим количеством строк. Проверь свободное место на диске и установлены ли последние SP для сервера. -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
Кроме советов выше - у меня есть опыт, что делать все единым запросом не всегда быстро. Бывает удобно использовать временные таблицы.
|
|||
|
||||
![]()
|
| Правила форума "MS SQL" | |
|
|
Запрещается! Публиковать ссылки и обсуждать взлом чего бы то ни было.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MS SQL Server | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |