1

毎晩、.csv ファイルが外部の会社によって私の FTP サーバーにダンプされます。(したがって、私はその形式を制御することはできません。また、他のいくつかの会社で使用されているため、変更することもありません。)

私の使命は、ファイルから情報を抽出 (および削除) し、抽出されたデータを SQL テーブルに挿入するために実行されるジョブを作成することです。

.csv ファイルに含まれる情報の形式は次のとおりです。

[Message]Message 1 contains, a comma,[Cell]27747642512,[Time]3:06:10 PM,[Ref]144721721
[Message]Message 2 contains,, 2 commas,[Cell]27747642572,[Time]3:06:10 PM,[Ref]144721722
[Message],[Cell]27747642572,[Time]3:06:10 PM,[Ref]144721723

次の列を持つ SQL Server 2012 テーブルがあります。

Message varchar(800)
Cell varchar(15)
Time varchar(10)
Ref varchar(50)

SQL 一括挿入 (下記参照) のようなものを使用して、.csv ファイルから読み取り、上記の SQL テーブルに挿入したいと考えています。

BULK INSERT sms_reply
    FROM 'C:\feedback.csv'
    WITH
    (
    FIRSTROW = 2,
    FIELDTERMINATOR = ',',  --CSV field delimiter
    ROWTERMINATOR = '\n',   --Use to shift the control to next row
    TABLOCK
    )

.csv ファイルの区切り文字は一般的ではありません。区切り文字を指定するときにワイルドカード文字を使用する方法があるかどうか疑問に思っていました。例: '[%]'?

これにより、角かっこの間にあるものはすべて無視され、その間の情報が抽出されます。

上記の .csv の例に示されているように、フィールド自体にコンマが含まれている可能性があるため、単純にコンマを使用してフィールドを区切ることはできません。

または、他の提案があれば、本当に感謝します。

ティア。

4

2 に答える 2

0

私のアプローチは次のとおりです。

  1. csv ファイルをステージング テーブルに一括読み込みします。データを受け入れるすべての列は varchar になります。
  2. 角かっことその内容を取り除くために sql update を実行します。
  3. 他に必要な処理をすべて行います。
  4. ステージング テーブルから本番テーブルにデータを挿入します。
于 2013-08-20T12:11:14.723 に答える