2

次の形式のテーブルがあります。

smallint、binary(10)、smallint、smallint、varbinary(max)

また、バイナリ データが 16 進データとしてエクスポートされるプロセスの 1 つによってテーブル内のデータから生成された csv ファイルもあります。
動作する INSERT INTO ステートメントを生成しようとしましたが、非常に遅くなりました..
BULK INSERT に飽きましたが、失敗しており、バイナリデータが原因であると思われます。

BULK INSERT (またはそのようなもの) を使用して、バイナリ データを含む大量のデータを挿入する方法を知っている人はいますか?

データの例:

1,0x00000000000000000BB8,0,142,0x434F4E534E554D424552202020202020040006000600202000000000202000000000000000008000422020202020202020202020202020202020000000000000000000000000000000000000202000000020000000000000000000000000000000000000000000000000000000000200020000000000000004000000E09304006B8016000600FFFFFFFF0B00010007004633303030002E81FFFF1C00FFFFFFFF04001E00

ありがとう。

4

1 に答える 1

5

問題は、0x434F4E... が 16 進展開としてではなく、挿入される実際のバイト (0x3078343334463445) として扱われていることだと思います。('0' = 0x30、'x' = 0x78、'4' = 0x34 など。) 16 進数には値ごとに 2 つの文字があるため、切り捨てが発生します。欲しいです。

BULK INSERT のオプションを調べて、16 進数をバイナリとして解釈するように指示する方法が見つからない場合は、SSIS を使用することをお勧めします。SSIS からバイナリ値を一括で読み込む実際の経験はありませんが、間違いなくそれが可能であり、高速になるでしょう。

バイナリ値の 16 進数表現ではなく、実際のバイトを出力する可能性は常にあると思いますが、デリミタを使用している場合は、デリミタがバイナリ値。これは、まさにテキストとバイナリ データの混在の問題です。列とそのデータ型を定義する BULK INSERT の特別な拡張構文を使用して、固定長の列インポートを使用することで、これを実行できる場合があります。

于 2010-01-16T18:48:02.170 に答える