[解決済み】CSVファイルをSQL Serverへインポートする。
質問
をインポートするためのヘルプを探しています。
.csv
ファイルをSQL Serverに
BULK INSERT
と、基本的な質問がいくつかあります。
問題点
-
CSVファイルのデータには
,
(カンマ)で区切られたデータ(例:description)を扱うインポートをするにはどうしたらよいですか? -
クライアントがExcelでCSVを作成した場合、カンマがあるデータは
""
(二重引用符) [以下の例のように]インポートはこれをどのように扱うことができますか? -
一部の行が不正なデータを持っている場合、インポートがスキップする行をどのように追跡するか?(インポートがスキップする行は、インポート不可能な行か?)
ヘッダー付きの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
)
関連
-
[解決済み】データベースへの「ネイティブ」SQL接続を使用するとはどういう意味ですか?
-
[解決済み] SQLでchar値をmoneyに変換できない
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] SQL Server で複数行のテキストを 1 つのテキスト文字列に連結する方法
-
[解決済み] SQL Server テーブルにカラムが存在するかどうかを確認する方法は?
-
[解決済み] SQL Server の DateTime データ型から日付だけを返す方法
-
[解決済み] SQL ServerにおけるLEFT JOINとLEFT OUTER JOINの比較
-
[解決済み】SQL Serverで既存のテーブルにデフォルト値を持つカラムを追加する
-
[解決済み] SQL ServerでINNER JOINを使用して削除するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】オペランド型の衝突:intはdateと互換性がない + INSERT文はFOREIGN KEY制約と衝突した
-
[解決済み】2つの列を分割する方法は?
-
[解決済み】BULK INSERTで「予期せぬファイルの終了」エラーが発生したROWを特定する?
-
[解決済み】一括読み込みデータ変換エラー(指定されたコードページに対して型の不一致または無効な文字)1行目4列目(年)について)
-
[解決済み] INSERT ステートメントが FOREIGN KEY 制約と競合する - SQL Server
-
[解決済み] 2つの列を分割するには?
-
[解決済み] WHERE x IN (5) vs WHERE x = 5 ...なぜINを使うのか?
-
[解決済み] ORA-12801: 並列クエリサーバー P004 および ORA-01555 でシグナルされたエラー: スナップショットが古すぎる。
-
[解決済み] 列名または提供された値の数がテーブル定義と一致しません。
-
[解決済み] ORA-00997: LONG データタイプの不正使用に対する回避策