0

SQL Server で BULK INSERT とフォーマット ファイルを使用して .CSV ファイルをインポートしようとしています。フォーマット ファイルを作成し、各値に正しいフィールド ターミネータを設定しました。フォーマット ファイルは正しく検証され、いくつかのテスト データを正常にインポートできました。

ただし、次のように、引用されたテキストの途中でコンマが発生すると問題が発生します。

" "SB","7Y4386429Y0351805","B5503","","Chris",1,10,"Paypal","こんにちは、支払いが遅れて申し訳ありません。すぐに支払いを送信します."

(サンプルデータ)

引用されているフィールドと引用されていないフィールドを正しく識別するようにフォーマット ファイルを設定しましたが、最後のフィールドの中央にコンマがあり、インポート中にエラーが発生しています。

FieldTerminator を "," に設定して、これも完全に省略しようとしましたが、ターミネータを無視して、代わりにフォーマット ファイル内のものを使用するべきではありませんか?

フィールドが引用符で囲まれているため、コンマによってフィールドが終了する理由がわかりません。これは設計によるものですか?フォーマット ファイル内のどのフィールド ターミネータとも一致しないため、コンマは無視する必要がありますか?

ここでのオプションは何ですか? 問題のデータは Paypal からのものであるため、エクスポート方法を変更する可能性はあまりありません。

何か案は?

重要な場合は、フォーマット ファイルの最初の部分を以下に示します (実際のファイルには 56 行が含まれます)。56 行すべてが同じ SQLCHAR データ型、同じ長さ、および同じ終了値を持ちます。

10.0                            
56
1   SQLCHAR 0   0   "\""    0   DUMMY   SQL_Latin1_General_CP1_CI_AS                            
2   SQLCHAR 0   100 "\",\"" 1   CH  SQL_Latin1_General_CP1_CI_AS
3   SQLCHAR 0   100 "\",\"" 2   TransactionID   SQL_Latin1_General_CP1_CI_AS
4   SQLCHAR 0   100 "\",\"" 3   InvoiceID   SQL_Latin1_General_CP1_CI_AS
5   SQLCHAR 0   100 "\",\"" 4   PayPalReferenceID   SQL_Latin1_General_CP1_CI_AS

どんな助けでも大歓迎です。

ありがとう、

クリス。

4

2 に答える 2

0

私が見る限り、あなたはそれを正しくやった - ここから知識を得る:

http://www.sqlservercentral.com/Forums/Topic18289-8-1.aspx#bm87418

基本的に、最後のフィールドの途中のコンマは「,」ではなく、

リンク ("\",\"") および ("\"\r") のように最初と最後の区切り文字を設定してみて、それが役立つかどうかを確認してください。

または、ファイルを前処理して、「,」を #$## のようなジャンクに置き換え、, を に置き換えます。(または他の文字) と #$## を "," で囲み、インポートしますか? , が最後のフィールドで重要でない限り、通常はドットでうまくいきます。

于 2011-04-04T16:13:07.957 に答える
0

これに加えて、FIELDTERMINATOR 値は、BULK INSERT の SQL にこの値を含めても結果が同じであるため、何の効果もないようです。したがって、フォーマット ファイル ターミネータが引き継ぐため、今後は省略します。

ただし、問題は依然として存在し、引用されたテキストの途中にある単一のコンマがフィールドを終了させる理由は非常に奇妙に思えます。

于 2011-04-04T16:26:08.810 に答える