📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

51行目: 51行目:
<br><br>
<br><br>


== BULK INSERTの例 ==
== 使用例 ==
下記は、CSVファイル(カンマ区切り)をインポートする際の例である。<br><br>
====  カンマ区切りファイルのインポート ====
* 文字コードがShift-JISの場合
# CSVファイルの内容
John,Doe,30,New York
Jane,Smith,25,Los Angeles
<br>
<syntaxhighlight lang="tsql">
BULK INSERT Employees
FROM 'D:\Data\employees.csv'
WITH
(
    FIRSTROW = 2,                    /* ヘッダー行をスキップ */
    FIELDTERMINATOR = ',',            /* フィールド区切り文字 */
    ROWTERMINATOR = '\n',            /* 行区切り文字 */
    MAXERRORS = 2,                    /* 許容するエラーの最大数 */
    ERRORFILE = 'D:\Data\errors.txt'  /* エラーログファイル */
);
</syntaxhighlight>
<br>
==== タブ区切りファイルのインポート (日付フォーマット指定) ====
# TSVファイルの内容
OrderID    OrderDate    CustomerID    Amount
1001    2024-01-01    CUST001    1500.50
<br>
<syntaxhighlight lang="tsql">
BULK INSERT Orders
FROM 'D:\Data\orders.txt'
WITH
(
    DATAFILETYPE = 'char',
    FIELDTERMINATOR = '\t',    /* タブ区切り */
    ROWTERMINATOR = '\n',
    FORMAT = 'CSV',            /* CSVフォーマットを使用 */
    DATE_FORMAT = 'yyyy-MM-dd'  /* 日付フォーマットを指定 */
);
</syntaxhighlight>
<br>
==== 固定長フォーマットファイルのインポート ====
# データ例 (各フィールドが固定長)
ID  NAME      DEPT
001 JOHN      SALES
002 MARY      IT
<br>
<syntaxhighlight lang="tsql">
BULK INSERT Employees
FROM 'D:\Data\employees_fixed.txt'
WITH
(
    DATAFILETYPE = 'char',
    FORMATFILE = 'D:\Data\format.fmt',  /* フォーマットファイルを指定 */
    CODEPAGE = '65001',                /* UTF-8エンコーディング */
    KEEPNULLS                          /* NULL値を保持 */
);
</syntaxhighlight>
<br>
==== XMLフォーマットファイルを使用したインポート ====
<syntaxhighlight lang="tsql">
/* より詳細なデータマッピングが必要な場合 */
BULK INSERT Products
FROM 'D:\Data\products.txt'
WITH
(
    FORMATFILE = 'D:\Data\products_format.xml',
    CHECK_CONSTRAINTS,                          /* 制約チェックを有効化 */
    FIRE_TRIGGERS,                              /* トリガーを発火 */
    KEEPIDENTITY                                /* ID列の値を保持 */
);
</syntaxhighlight>
<br>
==== バッチ処理によるBULK INSERT ====
<syntaxhighlight lang="tsql">
/* 大量データを分割してインポートする場合 */
BULK INSERT LargeTable
FROM 'D:\Data\large_data.csv'
WITH
(
    BATCHSIZE = 1000,          /* バッチサイズを指定 */
    ROWS_PER_BATCH = 10000,    /* バッチあたりの行数 */
    TABLOCK,                  /* テーブルロックを使用 */
    ORDER (OrderColumn ASC)    /* データの順序を指定 */
);
</syntaxhighlight>
<br>
==== 文字コードに関する使用例 ====
以下の例では、CSVファイル (カンマ区切り) をインポートしている。<br>
<br>
  <syntaxhighlight lang="tsql">
  <syntaxhighlight lang="tsql">
/* 文字コードがShift-JISの場合 */
  BULK INSERT T_Table
  BULK INSERT T_Table
         FROM 'D:\UnicodeFile.txt'
         FROM 'D:\UnicodeFile.txt'
64行目: 151行目:
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
* 文字コードがUNICODEの場合 (SQL Server 2014 R2以前)
*: ただし、SQL Server 2014 R2以前では、下記のクエリを実行しても UTF-8形式のファイルは取り込めない。
*: (UTF-8固有の文字が無いUTF-8形式のファイルはインポートできる)
  <syntaxhighlight lang="tsql">
  <syntaxhighlight lang="tsql">
/* 文字コードがUNICODEの場合 (SQL Server 2014 R2以前) */
/* ただし、SQL Server 2014 R2以前では、下記のクエリを実行しても UTF-8形式のファイルは取り込めない */
/* (UTF-8固有の文字が無いUTF-8形式のファイルはインポートできる) */
  BULK INSERT T_Table
  BULK INSERT T_Table
         FROM 'D:\UnicodeFile.txt'
         FROM 'D:\UnicodeFile.txt'
77行目: 164行目:
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
* 文字コードがUTF-8の場合 (SQL Server 2014 R2以降)
*: SQL Server 2014 R2以降では、UTF-8形式のファイルをインポートすることが出来る。
  <syntaxhighlight lang="tsql">
  <syntaxhighlight lang="tsql">
/* 文字コードがUTF-8の場合 (SQL Server 2014 R2以降) */
/* SQL Server 2014 R2以降では、UTF-8形式のファイルをインポートすることが出来る */
  BULK INSERT T_Table
  BULK INSERT T_Table
         FROM 'D:\UnicodeFile.txt'
         FROM 'D:\UnicodeFile.txt'