2022年5月21日土曜日

(PC) SQL-Serverで、CSVデータを簡単にテーブルに変換する方法

今回の記事は、SQL-Serverにおいて、CSVデータを簡単にテーブルに変換する方法です。

ループで回して処理すれば何でも可能ですが、今回はXML型を間に挟むと簡単にいけるのでやってみました。

たとえば、"100,200,300,400,500"というCSVデータ(文字列)を、連番付けてテーブル変換のやり方です。




--変換の元となるCSVデータ
DECLARE @CSV varchar(max) = N'100,200,300,400,500';

--使用変数の定義
DECLARE @SRC nvarchar(max) = N'' --タグ組み立て用
       ,@DAT xml;                --変換用

--CSVをタグに変換する
SET @SRC = N'' + REPLACE(@CSV,N',',N'') + N'';

--XML型にセット
SET @DAT = @SRC;

--テーブル型に変換(ついでに連番も付与する)
SELECT IDENTITY(INT,1,1)        AS SEQ
      ,row.value('C [1]','int') AS DAT
  INTO #CSV_TABLE
  FROM @DAT.nodes('/R') AS T (row);

--変換結果の表示
SELECT *
  FROM #CSV_TABLE
 ORDER BY SEQ;




結果は以下のスクリーンショットのようになります。

タグは行「R」、列「C」だけあればOKです。

SQL-Server 2014あたりでも使えます。