我们正在将遗留的SQL Server 2000数据库转换为SQL Server 2008.两者都在IMAGE
列中存储二进制文件(JPG,BMP,DOC和PDF)(我知道数据类型已被弃用,但改变这一点不是一种选择。)
数据将插入带有基本
的新系统INSERT INTO [image] Values (SELECT [image] from legacy_db);
基本上是直接IMAGE
到IMAGE
推送。
转换进展顺利。在新系统上,JPG,BMP和DOC文件类型打开没有问题。 PDF是一场噩梦。
我们发现,对于PDF记录,许多已移入SQL Server 2008的行比SQL Server 2000数据库中的行具有更长的DATALENGTH()
。
有没有人知道为什么会这样?
答案 0 :(得分:1)
我不确定DATALENGTH()
问题,但作为解决方法,如果PDF文件在2000数据库中是正确的(我假设您已经验证了这一点),您可以尝试从应用程序中提取这些值并从应用程序中将它们重新保存在新表中,而不是仅仅执行INSERT / SELECT。
答案 1 :(得分:0)
通过编写函数来定位PDF的BOF标记和EOF标记解决了这个问题(可以有多个EOF标记,因此您必须找到最后一个标记)。将两个偏移(包括两个偏移)之间的字节填入新的字节数组,并使用新的字节数组更新BLOB字段。在此之后,PDF将在新系统中打开。