Каков наилучший подход к вызову процедуры MSSQL, которая принимает в качестве аргумента большой файл XML?

Я работаю над приложением, которое вставляет содержимое файла XML в MSSQL. БД, каждый раз при запуске сервера приложений.

XML содержит несколько записей связанных таблиц. Сохраненная процедура принимает содержимое файла XML в качестве аргумента (TEXT), создает указатель (sp_xml_preparedocument) и вставляет в таблицы с помощью OPENXML.

Мне нужно выполнить процедуру с помощью JDBC (или может быть SQLCMD) из сервер приложений, на котором находится файл XML.

Размер XML-файла составляет около 160 МБ, сейчас я отправляю XML-файл, читая его как большой объект String в CallableStatement, но это очень много времени/пространства/ресурсов.


person akjain    schedule 11.06.2014    source источник


Ответы (1)


Я не знаю, является ли это общепринятой передовой практикой, но если бы я это делал, я бы подумал, что это, вероятно, кандидат на следующий подход:

  1. преобразовать XML в легко загружаемые файлы, такие как скрипт, совместимый с BCP
  2. BCP/загрузить данные в промежуточные таблицы/временные таблицы
  3. SQL объединяет данные. Это имеет то преимущество, что вы можете оптимизировать SQL для своего варианта использования.

В этом случае нет необходимости «пропускать» большой двоичный объект в память и, таким образом, полагаться на расширенную обработку технологии загрузки SQL Server BCP, а не на MSXML.

В таком сценарии вызовы SQL представляют собой простые вызовы sp с параметрами, указывающими на файлы.


Если BCP вам не по душе, возможно, сработает аналогичное решение с использованием SSIS.


Наконец, если вы должны использовать файл XML, то, возможно, будет уместно передать имя файла процедуре SQL CLR, которая загрузит его в память SQL.

person Preet Sangha    schedule 12.06.2014