Помогите с партионным учетом на T-SQL, база от 1С 8.0

Evpatii Kolovrat

Поискал на форуме - темы про партионный учет есть, но все это немного не то.Проблема следующая - есть самописная конфа на 1С 8.0, база на MS SQL Server 2000, в ней(1Сv8) я организовал все ОК, и все было бы замечательно, если бы не проблема - генерю по 1000 документов по каждому клиенту(1000 человек) рандомной номенклатуры и т.д.... все жутко тормозит, в идеале хочется чтобы при 100 000 документов работало быстрее чем для 1000 сейчас. С T-SQL особо не работал, разобрался что и где хранится и реализовал партионный через серверные курсоры на серваке, но потратив прилично времени - производительности не добился - курсоры все жутко тормозят ((( В принципе я понимаю, что от курсоров можно избавиться работая с только с селектами, но я всю жизнь занимался процедурным программированием и особого опыта мышления множествами не имею. Поэтому прошу помочь, подскажите, чиркните общие очертания как быть без курсоров в следующем примере:===================================================на сервере есть 1) таблица документов "Docs" состоящая из полей Date,DocRef,Client,Goods,Amount,Price,Traff пусть для простоты будет один клиент и один товар, в таблице на сервере будет следующие данные:Дата |ДокСсылка| Клиент |Товар|Кол |Цена|ВидДвижения01.08 | D1 | Василий| Пиво | 100 | 15 | покупка02.08 | D2 |Василий | Пиво | 50 | 16 | покупка03.08 | D3 |Василий | Пиво | 25 | 17 | покупка2) Таблица движений документов "AccumReg" с полями Date,Registrator, Client, Goods, Amount, Price, LineNumber, Party, TraffДата |Регистратор |Клиент |Товар |Кол |Цена|НомерСтроки|Партия|ВидДвиж01.08 | D1 | Василий | Пиво | 100 | 15 | 1 |D1 | приход02.08 | D2 | Василий | Пиво | 50 | 16 | 1 |D2 | приход03.08 | D3 | Василий | Пиво | 25 | 17 | 1 |D3 | приход3) Таблица остатков по товарам AccumRegTotals с полями Period(только на начало месца),Client,Goods, Party, Amount, SummaПериод|Клиент |Товар|Партия|Количество|Остаток01.08 |Василий|Пиво | D1 | 100 | 1500 01.08 |Василий|Пиво | D2 | 50 | 80001.08 |Василий|Пиво | D3 | 25 | 425-----------------------------------------------------------------------------потом добавляем документ D4 в первую таблицу:04.08 | D4 | Василий | Пиво | 176 | 20вторая таблица примет вид:Дата |Регистратор |Клиент |Товар |Кол |Цена|НомерСтроки|Партия|ВидДвиж01.08 | D1 | Василий | Пиво | 100 | 15 | 1 |D1 | приход02.08 | D2 | Василий | Пиво | 50 | 16 | 1 |D2 | приход03.08 | D3 | Василий | Пиво | 25 | 17 | 1 |D3 | приход04.08 | D4 | Василий | Пиво | 100 | 15 | 1 |D1 | расход04.08 | D4 | Василий | Пиво | 50 | 16 | 2 |D2 | расход04.08 | D4 | Василий | Пиво | 25 | 17 | 3 |D3 | расход04.08 | D4 | Василий | Пиво | 1 | 20 | 4 |D4 | расхода третья таблица будет следующей:Период|Клиент |Товар|Партия|Количество|Остаток01.08 |Василий|Пиво | D1 | 0 | 0 01.08 |Василий|Пиво | D2 | 0 | 001.08 |Василий|Пиво | D3 | 0 | 001.08 |Василий|Пиво | D4 | -1 | -20--------------------------------------------можно теперь для наглядности добавить документ D5 от 05.08 на покупку 2-х шт пива:05.08 | D5 | Василий | Пиво | 2 | 25тогда таблица 2 будет01.08 | D1 | Василий | Пиво | 100 | 15 | 1 |D1 | приход02.08 | D2 | Василий | Пиво | 50 | 16 | 1 |D2 | приход03.08 | D3 | Василий | Пиво | 25 | 17 | 1 |D3 | приход04.08 | D4 | Василий | Пиво | 100 | 15 | 1 |D1 | расход04.08 | D4 | Василий | Пиво | 50 | 16 | 2 |D2 | расход04.08 | D4 | Василий | Пиво | 25 | 17 | 3 |D3 | расход04.08 | D4 | Василий | Пиво | 1 | 20 | 4 |D4 | расход05.08 | D5 | Василий | Пиво | 1 | 20 | 1 |D4 | приход05.08 | D5 | Василий | Пиво | 1 | 25 | 2 |D5 | прихода третья 01.08 |Василий|Пиво | D1 | 0 | 0 01.08 |Василий|Пиво | D2 | 0 | 001.08 |Василий|Пиво | D3 | 0 | 001.08 |Василий|Пиво | D4 | 0 | 001.08 |Василий|Пиво | D5 | 1 | 25=============================================================теперь вопрос по конкретнее - как реализовать алгоритм на T-SQL без курсоров и прочих тормозящих работу вещей, только select, update и insert, чтобы учитывая схематично описаную выше структуру таблиц реализовать нужную логику? Можно писать сюда, можно на evpatii[at]gmail[dot]com, буду благодарен всем откликнувшемся - тут даже дело уже на интерес - глядишь начну становиться потихоньку sql-прогером ))
3 ответа

Evpatii Kolovrat

Начните вот с этого.
спасибо большое, уже начал... только вот там не совсем то... точнее человеку с моим уровнем в T-SQL надо будет потратить немало времени в применении логики оборотки в ссылке к нужной задаче ))))) но все равно tnx


Evpatii Kolovrat

тема все еще очень актуальна! буду признателен за любые советы!