|
|
|
Очень большой запрос
|
|||
|---|---|---|---|
|
#18+
Уважаемые мастера! Мне необходимо получить итоговый отчет деятельности фирмы, но у меня возникла следующая ситуация.Мой запрос состоит из 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 ... Помогите пожалуйста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2002, 14:41:51 |
|
||
|
Очень большой запрос
|
|||
|---|---|---|---|
|
#18+
ИМХО на самом деле он загинается из-за превышения допустимого количества подзапросов в одном селекте(когда-то давно это было 16,сколько в 2К -незнаю) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2002, 14:49:20 |
|
||
|
Очень большой запрос
|
|||
|---|---|---|---|
|
#18+
Отчет в одном запросе - дурной тон. Разбей на кусочки. Промежуточные результаты имеет смысл скидывать в таблицы (можно, временные) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2002, 14:55:54 |
|
||
|
Очень большой запрос
|
|||
|---|---|---|---|
|
#18+
Люди! Товарищи! Где взять полный перечень признаков плохого тона? Все уже в курсе, а я себя лохом ощущаю. ПЛЗ!!!!!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2002, 15:30:16 |
|
||
|
Очень большой запрос
|
|||
|---|---|---|---|
|
#18+
Точно такая-же ошибка возникла сегодня! Но из-за линкованых серверов. Перерегестрил - все пучком. 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2002, 17:27:19 |
|
||
|
Очень большой запрос
|
|||
|---|---|---|---|
|
#18+
U menia toze takaia oshibka, kogda delau tot -ze zapros no dati menshe(naprimer tolko za poslednuu nedelu) to rabotaet, a esli za mesiac zagibaetsia. Chto delat? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2002, 07:37:16 |
|
||
|
Очень большой запрос
|
|||
|---|---|---|---|
|
#18+
Почему-то мне кажется, что клиент в данном случае аксес, поправьте если не так. В других ситуациях надо использовать сторед просиду с временной таблицей и все подселекты пихать в неё отдельными инсертами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2002, 10:13:34 |
|
||
|
|

start [/forum/topic.php?fid=46&tid=1820864]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
23ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
42ms |
get tp. blocked users: |
2ms |
| others: | 202ms |
| total: | 313ms |

| 0 / 0 |
