Наименее ресурсо-затратный способ сохранить данные в БП

Есть БП, внутри которого в Сценарии на C# вычисляется большая таблица данных. Её нужно один-в-один положить в БД. Все поля известны.

Как с наименьшими затратами это лучше сделать? БП будет вызываться часто, поэтому сохранять надо быстро с минимальным временем блокировки таблицы.

Нравится

1 комментарий

Добрый день

Конечно не очень хорошо в памяти держать большую таблицу :), но раз так, то подумаем логически что нам нужно сделать:

  1. Можно попробовать передать по одной записи, но тогда будут потери времени на уровне сетевых устройств + постоянное создание транзакций 
  2. Можно одним запросом реализовав хранимую процедуру

Лучше всего использовать хранимую процедуру, которая может иметь также 2 варианта:

  1. Передаются данные параметром (все записи вместе)
  2. Хранимая процедура берет данные из файла (который уже положен на диск, если есть такая возможность)

Оптимальный вариант №1. Но какой параметр. Варианта опять 2:

  1. Зарегистрировать свой тип на уровне БД 
  2. Передать все в виде xml

Оба варианта не понятны будут для приложения bpmonline, но, тип xml хорошо преобразовуется в nvarchar(max) и обратно.

Поэтому финальный вариант я вижу такой:

  1. На сервере в С# коде готовим XML с данными
  2. На уровне БД пишем хранимую процедуру с входящим параметром nvarchar(max)
  3. Внутри процедуры преобразовуем в xml и начинаем работать с xml на уровне SQL (https://docs.microsoft.com/ru-ru/sql/t-sql/xml/nodes-method-xml-data-type

 

Показать все комментарии