Проблемы преобразования типов данных 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-файлы открываются в новой системе.

Другие вопросы по тегам