Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
nerv Member Откуда: Сообщений: 734 |
Есть таблица - справочник, например SPR1 SPR1_ID, SPR1_CODE, SPR1_NAME содержит около 100-150 записей. Cправочник SPR2 (содержит до 50 записей) SPR2_ID SPR2_NAME Есть таблица-справочник SPR3 SPR3_ID, SPR1_ID, SPR2_ID Связь SPR1 c SPR3 один-ко-многим. Каждой записи SPR1 соответствует от 4-х до 8 записей SPR2. SPR1_CODE - буквенно-цифровой код различной длины. Предполагается, что пользователь будет импортировать из xls файлик с записями, который необходимо проанализировать. Количество записей в xls могут быть и 30 записей и 3000 записей. Формат записи примерно такой: Наименование ; Коды из справочника SPR1_CODE То есть в одном поле "Коды из справочника SPR1_CODE" могут быть перечислены несколько кодов через какой-нибудь разделитель, например "\". В результате анализа надо получить таблицу вида Наименование SPR2_ID, отсеив повторяющиеся SPR2_ID.
Как грамотнее сделать? Хочется процесс анализа показывать в виде прогресс-бара на экране и выдавать лог анализастолько то строк обработано, найдено: соль, мука... и выводить ошибки, например пришло из xls "винегрет", которого нет в справочнике SPR1, то написать, что "винегрет" не сопоставлен. Собственно вопрос. Как грамотнее это реализовать: В программе открывать построчно записи из xls (они предварительно проимпортируются во временную таблицу) и передавать ID в процедуру и выводить в результирующую таблицу включая ошибки. В этом случае мы знаем сколько записей всего в таблице и сможем правильно процесс анализа показать на прогресс-баре. Но это увеличит время обработки и количество запросов на сервер. Или же лучше сразу произвести обработку на сервере (что значительно быстрее), результат поместить в таблицу и на экран уже вывести результат. Как грамотнее сделать? P.S. пример совершенно от фонаря и не имеет ничего общего с заданием. |
|
14 янв 13, 10:38 [13764942] Ответить | Цитировать Сообщить модератору |
Кот Матроскин Member Откуда: Москва Сообщений: 8933 |
При правильной организации импорт и обработка файла в 3000 строк займет секунды - не вижу смысла в прогресс-баре. "Закачать, обработать, выдать ошибки" - имхо более правильный паттерн, чем обрабатывать построчно. |
14 янв 13, 11:28 [13765297] Ответить | Цитировать Сообщить модератору |
nerv Member Откуда: Сообщений: 734 |
Cпасибо за ответ, Кот Матроскин. А где лучше делать закачку xls-файла: на стороне сервера или на стороне клиента? В MS SQL есть возможность импорта через ODBS xls - файлов, но тогда я так понимаю путь к xls-файлу надо указывать со стороны сервера. Мне ж надо выгрузить полностью xls файл в какую-нибудь временную (создаваемую на время работы пользователя с функционалом) и потом удалять эту таблицу. То есть юзер на своем клиенте выбирает через диалог открытия файла файл xls, придумывается имя временной таблицы, создается ее структура и полностью сливается xls- файл в эту только созданную таблицу. После чего юзеру отображается эта "временная таблица" в Gride, пользователь работает с ней и по нажатию какой-то кнопки производится обработка этой таблицы, сохранение ее в постоянную таблицу (в нужном формате, с нужными id и т.д.) и уничтожается временная таблица. Если это делать на клиенте, видимо необходимо по строчкам вытаскивать записи из xls и сохранять в таблицу. Если же импортировать на сервере, то: 1) что по поводу пути к xls-файлу (путь с клиентской машины, а не с сервера); 2) как передать клиенту имя "временной" таблицы. Имя можно генерить скажем по текущей дате/времени. |
14 янв 13, 19:01 [13768895] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |