1. ホーム
  2. sql

[解決済み】CSVファイルをSQL Serverへインポートする。

2022-04-07 05:38:08

質問

をインポートするためのヘルプを探しています。 .csv ファイルをSQL Serverに BULK INSERT と、基本的な質問がいくつかあります。

問題点

  1. CSVファイルのデータには , (カンマ)で区切られたデータ(例:description)を扱うインポートをするにはどうしたらよいですか?

  2. クライアントがExcelでCSVを作成した場合、カンマがあるデータは "" (二重引用符) [以下の例のように]インポートはこれをどのように扱うことができますか?

  3. 一部の行が不正なデータを持っている場合、インポートがスキップする行をどのように追跡するか?(インポートがスキップする行は、インポート不可能な行か?)

ヘッダー付きのCSVのサンプルはこちらです。

Name,Class,Subject,ExamDate,Mark,Description
Prabhat,4,Math,2/10/2013,25,Test data for prabhat.
Murari,5,Science,2/11/2013,24,"Test data for his's test, where we can test 2nd ROW, Test."
sanjay,4,Science,,25,Test Only.

そして、インポートするSQL文。

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

解決方法は?

SQL Server CSVインポートをベースに

1) CSVファイルのデータには , (カンマ)を挟んでいる(Ex: という記述がありますが、どのようにすればこれらのデータを扱うインポートができるのでしょうか?

解決方法

を使用している場合 , (カンマ) を区切り文字として使用した場合、フィールドの終端としてのカンマとデータ内のカンマを区別する方法がありません。私なら、別の FIELDTERMINATOR のように || . このようにすると、カンマやシングルスラッシュを完全に処理することができます。

<ブロッククオート

2) クライアントがエクセルからcsvを作成した場合、そのデータには カンマは " ... " (ダブルクォーテーション) [以下のように インポートはどのようにこれを処理することができますか?

解決方法

BULK insertを使用している場合、ダブルクォートを処理する方法はありません。 行にダブルクォーテーションで挿入されます。 データをテーブルに挿入した後、これらのダブルクォートを''で置き換えることができます。 '.

update table
set columnhavingdoublequotes = replace(columnhavingdoublequotes,'"','')

3) インポートがスキップする、いくつかの行が不良データを持っている場合、どのように追跡しますか? (インポートがインポート不可能な行をスキップするのか)?

解決方法

データまたはフォーマットが無効なためにテーブルにロードされない行を処理するには、次のようにします。 を使用して処理します。 ERRORFILEプロパティ エラーファイル名を指定すると、その行を書き込みます。 のようなコードになります。

BULK INSERT SchoolsTemp
    FROM 'C:\CSVData\Schools.csv'
    WITH
    (
    FIRSTROW = 2,
    FIELDTERMINATOR = ',',  --CSV field delimiter
    ROWTERMINATOR = '\n',   --Use to shift the control to next row
    ERRORFILE = 'C:\CSVDATA\SchoolsErrorRows.csv',
    TABLOCK
    )