Проблемы преобразования типов данных SQL Server IMAGE
Мы преобразуем устаревшую базу данных SQL Server 2000 в SQL Server 2008. Оба хранят двоичные файлы (JPG, BMP, DOC и PDF) в IMAGE
столбец (я знаю, что тип данных устарел, но изменить это не вариант).
Данные вставляются в новую систему с базовым
INSERT INTO [image] Values (SELECT [image] from legacy_db);
в основном прямой IMAGE
в IMAGE
От себя.
Конверсия шла хорошо. В новой системе типы файлов JPG, BMP и DOC открываются без проблем. PDF-файлы были кошмаром.
Мы обнаружили, что для записей PDF многие строки, которые были перемещены в SQL Server 2008, имеют более длинный DATALENGTH()
чем те же строки в базе данных SQL Server 2000.
Кто-нибудь знает, почему это так?
2 ответа
Я не уверен насчет DATALENGTH()
проблема, но в качестве обходного пути, если файлы PDF верны в базе данных 2000 года (я полагаю, вы это проверили), вы можете попробовать извлечь эти значения из приложения и повторно сохранить их в новой таблице из приложения вместо просто делаю INSERT/SELECT.
Решил эту проблему, написав функции для поиска маркера BOF PDF и маркера EOF (может быть несколько маркеров EOF, поэтому вам нужно найти последний). Вставьте байты между двумя смещениями включительно в новый байтовый массив и ОБНОВИТЕ поле BLOB новым байтовым массивом. После этого PDF-файлы открываются в новой системе.