| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MS SQL Server > Очень большой запрос в MS SQL 7.0 |
| Автор: Fedorenkoda 16.8.2002, 21:39 |
| Уважаемые мастера! Мне необходимо получить итоговый отчет деятельности фирмы, но у меня возникла следующая ситуация.Мой запрос состоит из 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 16.8.2002, 21:56 |
| 1) Повторяющиеся константы определи 1 раз, как переменные, а затем их используй 2) Проследи чтобы были индексы по всем полям, упомянутым в "Where" секции 3) Попробуй упростить кверю (например разбить её по местам где у тебя union на несколько), посмотри проходит ли она в упрощённом виде, затем постепенно усложняй 4) Проверь языковые установки, почему-то ошибка вываливается о языке... |
| Автор: Keks 23.9.2002, 05:19 |
| Такое же сообщение вываливается у меня при выполнении запроса с full join трех таблиц если в них много строк. При малом числе строк все нормально! Я считаю это просто позорным багом. |
| Автор: Vit 23.9.2002, 08:05 | ||
Я делал Full Join на десяток таблиц с довольно большим количеством строк. Проверь свободное место на диске и установлены ли последние SP для сервера. |
| Автор: AntonSaburov 16.10.2002, 23:31 |
| Кроме советов выше - у меня есть опыт, что делать все единым запросом не всегда быстро. Бывает удобно использовать временные таблицы. |