Дано:
Очень большой файл XML, который загружается в таблицу с использованием типа данных nvarchar(max)
. Это приводит к удвоению размера данных (возможно, из-за кодировки SQL Server в Unicode), а затем мы читаем файл из таблицы, анализируем его и выполняем массовую вставку в другие таблицы в базе данных.
Проблема:
На сервере разработки это работает нормально и проблем нет. Однако при попытке выполнить массовую вставку на рабочий сервер я получаю следующую ошибку:
Исключение: System.InvalidOperationException:
Заданное значение типа String из
источник данных не может быть преобразован в
введите nvarchar указанной цели
колонка. --->
System.InvalidOperationException:
Строковые или двоичные данные будут
усеченный.
Пара странных вещей, которые я заметил:
При загрузке ANSI-версии XML-файла (который будет прочитан позднее веб-приложением) он добавляет несколько байтов в файл, а затем удваивает размер при вставке в нашу таблицу. При загрузке версии Unicode байты остаются прежними, но они также удваиваются, а затем с треском проваливаются
b e c a u s e t h e d a t a s t a r t s t o l o o k l i k e t h i s.
Мы исключили неверные данные, свернув XML до одной записи под корнем. Разработка занималась этим, производство - нет.
Что-то ДОЛЖНО отличаться от конфигурации в наших серверах разработки и производственных серверах, но мы не можем этого понять. Кстати, сопоставление тоже самое.
Любая помощь будет принята с благодарностью!
РЕДАКТИРОВАТЬ: Обновление: Мы попытались прочитать файл в объект XmlDocument
непосредственно с сервера и минуя процесс сохранения его в БД. Без изменений в поведении.
Второе обновление: Мы исключили процесс FTP (возможно?), Скопировав файл, а затем НАЗАД (размер файла уменьшается на несколько байтов, но мы возвращаем эти байты при его повторном копировании) .