【SQLServer】CSVファイルを一括インポート バルクインサートの使い方を解説

※ この記事にはアフィリエイトリンクが含まれます

データベース管理において、大量のデータを効率的に取り込むことは重要な作業です。特に、CSVファイルは、データを簡単にエクスポート・インポートできる形式として広く利用されています。SQLServerでは、このCSVファイルからデータを一括でインポートするために「バルクインサート」という手法が用意されています。

本記事では、SQLServerにおけるバルクインサートの基本的な説明から、実際の操作手順までを詳しく解説します。CSVファイルを使ってデータをスムーズにインポートするための知識を深めていきましょう。

バルクインサートとは?

バルクインサートとは、SQLServerにおいて大量のデータを効率的にデータベースに挿入するための手法です。通常のINSERT文を使う場合、1行ずつデータを挿入するため、データ量が増えるにつれて処理速度が遅くなることがあります。しかし、バルクインサートを使用すると、CSVファイルや他のデータソースから一度に複数のレコードを読み込むことができ、パフォーマンスを大幅に向上させることが可能です。

この手法は特に、大規模なデータ移行や、定期的なデータ更新が必要なシナリオにおいて有用です。バルクインサートでは、データの読み込みと書き込みが最適かされており、エラー処理やトランザクション管理も行えるため、信頼性の高いデータ操作を実現します。

一般的に、バルクインサートは次のような状況で使用されます。

  • 大量のデータを一度にインポートする必要がある場合
  • 外部システムから定期的にデータを取り込む場合
  • データベースのバックアップや復元時に大量のデータを移動する場合

ここではバルクインサートのメリットや基本的な使い方を説明しました。次はバルクインサートの構文についてみていきましょう。

バルクインサートの基本的な構文

BULK INSERT ステートメントは、SQL Server において外部ファイルからデータを一括で挿入するために使用されます。この構文は非常にシンプルですが、いくつかのオプションを指定することで、柔軟にデータのインポートを行うことができます。

基本的な構文

BULK INSERT [テーブル名]
FROM 'ファイルパス'
WITH (
    FIELDTERMINATOR = '区切り文字',
    ROWTERMINATOR = '行区切り文字',
    FIRSTROW = 開始行番号,
    MAXERRORS = 最大エラー数,
    TABLOCK
);

各項目について見ていきましょう。

  • ファイルパス
    インポートするCSVファイルのパスを指定します。ここでは絶対パスで指定するようにしましょう。ファイルのアクセス権限に注意してください。
  • FIELDTERMINATOR
    各フィールドを区切る文字を指定します。デフォルトではカンマ区切り(,)になりますが、任意の区切り文字に変更することができます。タブ区切りにしたい場合は'\t')と指定します。
  • ROWTERMINATOR
    行の区切り文字を指定できます。デフォルトでは改行(\n')になりますが、必要に応じて指定することができます。
  • FIRSTROW
    インポートを開始する行番号を指定します。ヘッダー行をスキップする場合に便利です。
  • MAXERRORS
    許容する最大エラー数を指定できます。デフォルトは10です。指定した数値を超えるエラーが発生した場合、処理が停止されます。
  • TABLOCK
    インポート時にテーブル全体をロックするオプションです。これにより、パフォーマンスが向上することがあります。

実際に、ProductsというテーブルにCSVファイルを使用してデータを挿入する例を見てみましょう。

BULK INSERT Products
FROM 'C:\Data\products.csv'
WITH (
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = '\n',
    FIRSTROW = 2,
    MAXERRORS = 5,
    TABLOCK
);

この例では、product.csv ファイルのデータをProductsテーブルに挿入しています。ヘッダー行はスキップされ、最大5件のエラーが許容されます。

BULK INSSET を使用することで、大量のデータを迅速に挿入することが可能になります。

バルクインサートの実践例

実際にバルクインサートを使用してCSVファイルからデータをインポートする手順を見ていきましょう。ここでは、Productsテーブルを例に、CSVファイルのデータをSQLServerに一括でインポートします。

バルクインサートの流れ

まず、データを挿入する対象のテーブルを準備します。

CREATE TABLE Products (
    ProductID INT PRIMARY KEY,
    ProductName NVARCHAR(100),
    Price DECIMAL(10, 2),
    Stock INT
);

インポートするCSVファイルは、次のような形式になります。

ProductID,ProductName,Price,Stock
1,Apple,1.00,100
2,Banana,0.50,150
3,Orange,0.80,120

このファイルは、C:\Data\products.csv に保存されているものとします。

次に、BULK INSERT を使用して、CSVファイルのデータをProductsテーブルにインポートします。

BULK INSERT Products
FROM 'C:\Data\products.csv'
WITH (
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = '\n',
    FIRSTROW = 2,
    TABLOCK
);

ここでは、フィールドの区切り文字としてカンマ(,)を指定し、行の区切り文字は改行(\n)を指定しています。また、インポートするCSVの1行目がヘッダー行なので、FIRSTROWを2に設定しています。

インポートが成功したら、挿入されたデータを確認してみましょう。

SELECT * FROM Products;

このクエリを実行すると、以下のような結果が得られます。

ProductID  ProductName  Price  Stock
------------------------------------
1          Apple        1.00   100
2          Banana       0.50   150
3          Orange       0.80   120

まとめ

この記事では、SQLServerでバルクインサートを使用してCSVファイルを一括インポートする方法について解説しました。

バルクインサートを使用することで、大量のデータを簡単かつ効率的にSQLServerに取り込むことができます。今回学んだ手順を実践して、プロジェクトや業務で活用してみてください。

SQLServerを効率よく学びたい方はUdemyがおすすめ

もっとわかりやすくSQLServerを学びたいという方には、Udemyがおすすめです。Udemyは、オンライン学習を手軽に始められる便利なプラットフォームで、初心者から上級者向けまで、様々なレベルのSQLコースがそろっています。ですので自身のスキルや目的にあったコースを選ぶことができます。

また、Udemyはコミュニティのサポートもしており、質問や情報交換も行えるため、学習を進めている中で浮かんだ疑問などを解消する手助けを受けることもできます。

IT資格の人気オンラインコース

Udemyは定期的に90%OFFなどの規模でセールを開催しているので、そのタイミングを狙うのもありでしょう。今までにセールが開催された時期をまとめました。

  • 季節ごとのセール
    年末年始や夏季、春季などの特別な時期に大規模なセールを実施
  • 祝日セール
    バレンタインデー、感謝祭、クリスマスなどの祝日にもセールを実施
すぐに役立つスキルを 身につけよう! セール開催中!

コメント