web-dev-qa-db-ja.com

ファイルからデータを一括挿入しますが、フィールドターミネーターの最初の出現を無視します

次のスタイルでデータが配置されたファイルがあります。

    1    1    0.5102    0.4898    0.0000    0.0000    0.0000
    1    2    0.3114    0.6886    0.0000    0.0000    0.0000

これをMS-SQLのテーブルにロードして処理する必要があります。次の設定でBULK INSERTステートメントを使用しています

FIELDTERMINATOR = '    '
ROWTERMINATOR = '\n'

しかし、何が起こるかというと、次のような内容のテーブルができてしまいます(注:すべての列をVARCHARにして、データがどのようにインポートされるかを確認します)。

COL1    COL2    COL3    COL3    COL5    COL6    COL7
NULL    1       1       0.5102  0.4898  0.0000  0.0000    0.0000
NULL    1       2       0.3114  0.6886  0.0000  0.0000    0.0000

基本的に、データの最初の列の前には ''(4つのスペース)があります。ただし、BULK IMPORTは、最初の列がNULLであると想定し、列ごとにデータをオフセットします。

さて、私の質問-この問題を未然に防ぐことは可能ですか?最初のFIELD TERMINATORの出現を無視するようにBULK INSERTに指示できますか?プロセスの他の部分で使用されているため、入力ファイルを変更できません。

3
sriramn

データの量が十分に少ない場合、または操作にもう少しリソースを費やす余裕がある場合は、これを回避する方法があります。一括挿入を実行したほとんどのシナリオでは、いずれの場合も追加のデータ操作が必要であるため、通常は、特別に作成された一括挿入テーブルに一括データを挿入し、そこから実際のテーブルにデータを操作して転送します。このようなタスクをはるかに簡単にします。ただし、当然、同じデータを2回処理することによるオーバーヘッドは増加します。

1
Kahn