Есть БП, внутри которого в Сценарии на C# вычисляется большая таблица данных. Её нужно один-в-один положить в БД. Все поля известны.
Как с наименьшими затратами это лучше сделать? БП будет вызываться часто, поэтому сохранять надо быстро с минимальным временем блокировки таблицы.
Нравится
1 комментарий
1 февраля 2018 12:38
Добрый день
Конечно не очень хорошо в памяти держать большую таблицу :), но раз так, то подумаем логически что нам нужно сделать:
- Можно попробовать передать по одной записи, но тогда будут потери времени на уровне сетевых устройств + постоянное создание транзакций
- Можно одним запросом реализовав хранимую процедуру
Лучше всего использовать хранимую процедуру, которая может иметь также 2 варианта:
- Передаются данные параметром (все записи вместе)
- Хранимая процедура берет данные из файла (который уже положен на диск, если есть такая возможность)
Оптимальный вариант №1. Но какой параметр. Варианта опять 2:
- Зарегистрировать свой тип на уровне БД
- Передать все в виде xml
Оба варианта не понятны будут для приложения bpmonline, но, тип xml хорошо преобразовуется в nvarchar(max) и обратно.
Поэтому финальный вариант я вижу такой:
- На сервере в С# коде готовим XML с данными
- На уровне БД пишем хранимую процедуру с входящим параметром nvarchar(max)
- Внутри процедуры преобразовуем в xml и начинаем работать с xml на уровне SQL (https://docs.microsoft.com/ru-ru/sql/t-sql/xml/nodes-method-xml-data-type
Показать все комментарии
Войдите или зарегистрируйтесь, что бы комментировать