CSVファイルをSQL Serverへインポートする
私は .csv
ファイルを BULK INSERT
を使用して SQL Server にインポートするためのヘルプを探しており、いくつかの基本的な質問をしています。
**問題点:***
1.CSVファイルのデータの間に,
(カンマ)がある場合(例:description)があるのですが、このようなデータを扱うインポートはどのようにすればよいでしょうか?
2.2. クライアントがExcelからCSVを作成した場合、カンマがあるデータは""
(ダブルクォート)で囲まれます(以下の例のように)ので、インポートはこれをどのように処理できますか?
3.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
)
168
9
SQL Server CSVインポートベース
,
(カンマ)が入っている場合があります(例. このような場合、どのようにインポートすればよいのでしょうか。**解決方法
もし、区切り文字として
,
(カンマ) を使用している場合、フィールドの終端としてのカンマとデータ中のカンマを区別する方法はありません。私なら||
のような別のFIELDTERMINATOR
を使用します。コードは次のようになり、これでカンマとシングルスラッシュを完全に扱うことができます。" ... "
(ダブルクォート) で囲まれています。 インポートはどのように処理するのでしょうか?**解決方法
BULK insert を使用している場合、ダブルクォートを処理する方法はありません。 行にダブルクォーテーションで挿入されます。 データをテーブルに挿入した後、これらのダブルクォートを '` `' に置き換えることができます。
**解決方法
データまたはフォーマットが無効であるためにテーブルに読み込まれなかった行を処理するには、以下の方法があります。 ERRORFILEプロパティ]1を使って、エラーファイル名を指定すると、その行を書き込むことができます。 のようなコードになります。
まず、CSVファイルをインポートするテーブルをデータベースに作成する必要があります。 テーブルを作成したら、以下の手順に従ってください。
•SQL Server Management Studioを使用してデータベースにログインします。
•データベースを右クリックして、[タスク]を選択します->データのインポート。..`。
•[次へ]>ボタンをクリックします。
•データソースの場合は、[フラットファイルソース]を選択します。 次に、[参照]ボタンを使用してCSVファイルを選択します。 [次へ]>ボタンをクリックする前に、データのインポートを設定する時間をしばらく費やしてください。
•宛先の場合、正しいデータベースプロバイダーを選択します(例:. SQL Server 2012の場合、SQL Server Native Client 11.0を使用できます)。 サーバー名を入力します。 [SQL Server認証を使用する]ラジオボタンをオンにします。 [次へ]>ボタンをクリックする前に、ユーザー名、パスワード、およびデータベースを入力します。
•[ソーステーブルとビューの選択]ウィンドウで、[次へ]>ボタンをクリックする前にマッピングを編集できます。
•[すぐに実行]チェックボックスをオンにして、[次へ]>ボタンをクリックします。
•[完了]ボタンをクリックしてパッケージを実行します。
上記はこのウェブサイトで見つかりました(私はそれを使用してテストしました)。
FORMAT = 'CSV'、FIELDQUOTE = '"'オプションを使用する必要があります。
データ中のカンマの問題を解決する最も迅速で簡単な方法は、Windowsのリストセパレータの設定をカンマ以外のもの(パイプなど)にした後、Excelでカンマ区切りファイルを保存することです。 これにより、パイプ(またはその他)区切りのファイルが生成され、インポートすることができます。 これについては、こちらを参照してください。
まず、CSVファイルをデータテーブルにインポートする必要があります。
次に、SQLBulkCopyを使用して一括で行を挿入することができます。
これが私がそれを解決する方法です:
1。 CSVファイルをXLSシートとしてExcelに保存するだけです(そうすることで、区切り文字について心配する必要はありません。 Excelのスプレッドシート形式はテーブルとして読み取られ、SQLテーブルに直接インポートされます)。
2。 SSISを使用してファイルをインポートします。
3。 インポートマネージャーにカスタムスクリプトを記述して、探しているデータを省略/変更します。(または、マスタースクリプトを実行して、削除しようとしているデータを精査します)。
幸運を。
SQLインポートウィザードを使用しないため、手順は次のとおりです。
ここに画像の説明を入力してください。! 1。 オプション**タスクでデータベースを右クリックして、データをインポートします。
2。 ウィザードが開いたら、暗黙のデータのタイプを選択します。 この場合、それはです。
CSVファイルを選択します。CSVでテーブルのデータ型を構成できますが、CSVから取得することをお勧めします。
3。 [次へ]をクリックし、最後のオプションを選択します。
認証の種類に応じて選択しますが、これが完了すると、非常に重要なオプションが用意されます。
4。 CSVでテーブルのIDを定義できます(CSVの列は、テーブルのフィールドと同じと呼ぶことをお勧めします)。 [マッピングの編集]オプションでは、スプレッドシートの列で各テーブルのプレビューを確認できます。ウィザードにデフォルトでIDを挿入する場合は、オプションをオフのままにします。
(通常は1から開始しない)代わりに、CSVにIDのある列がある場合、有効ID挿入を選択します。次のステップは、ウィザードを終了することです。ここで変更を確認できます。
一方、次のウィンドウにはアラートが表示されることがあります。または警告は、これを無視するのが理想的です。エラーが残っている場合にのみ注意が必要です。
このリンクには画像があります。
最初にExcelを開いて、ファイルをExcelにインポートします。, その後、データに行きます。, TXTファイルからインポートします。, 0個の接頭辞値を保持するcsv拡張を選択します。, excelはそれ以外の場合は先頭の0をドロップするため、その列をTEXTとして保存します。 (0で始まるフィールドに数値データがある場合は、Excelで開くにはダブルクリックしないでください。 [ゼロ。]. 次に、タブ区切りのテキストファイルとして保存します。 Excelにインポートする場合、GENERAL、TEXTなどとして保存するオプションが表示されます。. YourCompany、LLCなどのフィールドの文字列の真ん中にある引用も保持されるようにTEXTを選択します。..
FORMATとFieldquoteの機能を使用できればいいのですが、私のバージョンのSSMSではサポートされていないようです。
受け入れられた答えがあることは知っていますが、それでも、誰かが問題を解決するのに役立つシナリオを共有したいと思います。 ツール。
-ASP.NET。 -EFコード-最初のアプローチ。 -SSMS。 -エクセル。
シナリオ。 後でビューに表示されるCSV形式のデータセットを読み込んでいました。 バルクロードを使用しようとしましたが、「バルクロード」を使用していたためロードできません。
Excelセルも
、
を使用していました。 ただし、「Code-First Approach」を使用していて、後でプロパティを使用する必要があったモデルではなく、SSMS DBでのみモデルを作成していたため、「Flatファイルソース」を直接使用することもできませんでした。ソリューション。
1。 フラットファイルソースを使用して、CSVファイルからDBテーブルを作成しました( SSMSで右クリックDB->フラットFIleのインポート-> CSVパスを選択し、指示どおりのすべての設定を行います)。 2。 Visual Studioでモデルクラスを作成(すべてのデータ型と名前を、SQLでロードされたCSVファイルと同じに保つ必要があります)。 3。 NuGetパッケージコンソールで「Add-Migration」を使用します。 4。 DBを更新します。