0

従来の 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 データベースの同じ行よりも長いことがわかりました。

これがなぜなのか、誰にも手がかりがありますか?

4

2 に答える 2

1

この問題についてはよくわかりませんDATALENGTH()が、回避策として、PDF ファイルが 2000 データベースで正しい場合 (これを確認したと思います)、アプリからそれらの値を取得して、新しいデータベースに再保存してみてください。 INSERT/SELECT を実行するだけでなく、アプリからテーブルを作成します。

于 2012-06-05T03:08:21.887 に答える
0

PDF の BOF マーカーと EOF マーカーを見つける関数を記述することで、この問題を解決しました (複数の EOF マーカーが存在する可能性があるため、最後のマーカーを見つける必要があります)。2 つのオフセット間のバイトを新しいバイト配列に詰め込み、新しいバイト配列で BLOB フィールドを更新します。この後、PDF は新しいシステムで開きます。

于 2012-06-06T16:58:48.167 に答える