SQLServerでCSVファイルをインポートする

SQLServerでCSVファイルをインポートする場合、「SQL Server Management Studio」にてインポートウィザードを使用すると簡単にインポートすることが可能ですが、ここではSQLでインポートを行う方法についてご紹介します。

コーディング例

BEGIN
    SELECT
        *
    INTO
        TBL_TEST
    FROM
        OPENROWSET(
             BULK 'C:\TEST.csv'
            ,FORMATFILE = 'C:\TBL_TEST.xml'
            ,FIRSTROW = 2
        ) AS TBL;
    SELECT * FROM TBL_TEST;
END

TBL_TEST.xml

<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <RECORD>
  <FIELD ID="1" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="12"/>
  <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="10" COLLATION="Japanese_CI_AS"/>
  <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="20" COLLATION="Japanese_CI_AS"/>
 </RECORD>
 <ROW>
  <COLUMN SOURCE="1" NAME="ID" xsi:type="SQLINT"/>
  <COLUMN SOURCE="2" NAME="Code" xsi:type="SQLNCHAR"/>
  <COLUMN SOURCE="3" NAME="Name" xsi:type="SQLNVARCHAR"/>
 </ROW>
</BCPFORMAT>

TEST.csv

ID,Code,Name
1,00001,テスト1
2,00002,テスト2
3,00003,テスト3

実行結果

ID Code Name
1 00001 テスト1
2 00002 テスト2
3 00003 テスト3

7行目にある「OPENROWSET」を使用すると指定したCSVファイルをテーブルとして扱うことができます。
ただしCSVファイルの構造を明記したフォーマットファイルが必要となります。
8行目の「BULK」でインポートを行うCSVファイルのパスを指定します。
9行目の「FORMATFILE」でフォーマットファイルのパスを指定します。
これらのパスはDBサーバ上のパスとなります。
10行目の「FIRSTROW=2」によりCSVファイルの2行目から読み込むように設定しています。
こちらの例ではCSVファイルを読み込んだテーブルを新規テーブル「TBL_TEST」として作成しています。

以上、「SQLServerでCSVファイルをインポートする」のご紹介でした。