0

我们正在将旧的 SQL Server 2000 数据库转换为 SQL Server 2008。两者都将二进制文件(JPG、BMP、DOC 和 PDF)存储在一个IMAGE列中(我知道数据类型已被弃用,但不能更改它) .

数据插入新系统,基本

INSERT INTO [image] Values (SELECT [image] from legacy_db);

基本上是直IMAGEIMAGE

转换进展顺利。在新系统上,JPG、BMP 和 DOC 文件类型打开时没有问题。PDF 是一场噩梦。

我们发现,对于 PDF 记录,已移动到 SQL Server 2008 中的许多行DATALENGTH()比 SQL Server 2000 数据库中的相同行更长。

有谁知道这是为什么?

4

2 回答 2

1

我不确定这个DATALENGTH()问题,但作为一种解决方法,如果 PDF 文件在 2000 数据库中是正确的(我假设您已经验证了这一点),您可以尝试从应用程序中提取这些值并将它们重新保存在新的应用程序中的表,而不仅仅是执行 INSERT/SELECT。

于 2012-06-05T03:08:21.887 回答
0

通过编写函数来定位 PDF 的 BOF 标记和 EOF 标记解决了这个问题(可能有多个 EOF 标记,所以你必须找到最后一个)。将两个偏移量之间的字节填充到一个新的字节数组中,并使用新的字节数组更新 BLOB 字段。在此之后,PDF 在新系统中打开。

于 2012-06-06T16:58:48.167 回答