Для обновления справочников из CSV файлов (и других структурированных текстовых файлов) рекомендуется использовать алгоритм обновления TXMLAlgorithm. Для этого необходимо на уровне SQL-скрипта, формирующего результирующую выборку, предварительно преобразовать импортируемый файл к формату XML, а затем настраивать обновление в соответствии с настройкой алгоритма TXMLAlgorithm.
Например, для преобразования CSV-файла к XML-документу:
-- Заносим в переменную содержимое CSV-документа
SET @XML_TEXT = :XML_TEXT;
-- Разделяем столбцы CSV-файла по XML-тегам с названием el
-- В данном примере для разделения столбцов в CSV-файле используется символ ";"
SET @XML_TEXT = REPLACE(@XML_TEXT, cast(';' as varchar(max)), cast('</el><el>' as varchar(max)));
-- Разделяем строки CSV-файла по тегам с названием rec
-- В данном примере для разделения строк в CSV-файле используется символ новой строки: char(13)
-- Все строки файла помещаем в общий контейнер root
SET @XML_TEXT = cast('<root><rec><el>' as varchar(max)) + REPLACE(@XML_TEXT, CAST(char(13) as varchar(max)), cast('</el></rec><rec><el>' as varchar(max))) + cast('</el></rec></root>' as varchar(max))
-- Указываем декларацию XML-документа с указанием корректной кодировки
-- Без указания XML-декларации сервер считает, что обрабатывается документ в кодировке UTF-8. Если при этом в тексте документа имеются кириллические символы, то парсер SQL сообщит о некорректной структуре XML-документа и завершит выполнение ошибкой.
-- Поэтому рекомендуется задавать кодировку обрабатываемого документа явно
SET @XML_TEXT = cast('<?xml version="1.0" encoding="windows-1251"?>' as varchar(max)) + REPLACE(@XML_TEXT, cast('"' as varchar(max)), cast('"' as varchar(max)));
-- В дальнейшем для обработки получившегося XML-документа используется парсинг посредством OPENXML
-- Для обращения к тегам el необходимо использовать маску "el[N]", где N - порядковый номер столбца (нумерация с единицы) в схеме WITH