[SQL Server] XMLを利用して大量のデータを登録する方法

inno
2014-04-10 16:04 2847 0
[SQL Server] XMLを利用して大量のデータを登録する方法

大量のデータを登録する方法はいろいろありますが、
一般的にはcsv,txtファイルのデータをBULK INSERTで登録するのが多いです。
処理速度もかなり早いです。

例えば、下記のようにINSERT INTOで1件、1件登録するのは基本中の基本ですが、
大量の場合、速度が遅いです。

INSERT INTO dbo.TempData (Col1, Col2) VALUES ('A001','B001');
INSERT INTO dbo.TempData (Col1, Col2) VALUES ('A002','B005');
INSERT INTO dbo.TempData (Col1, Col2) VALUES ('A101','B101');
INSERT INTO dbo.TempData (Col1, Col2) VALUES ('A003','B005');

これもデータをCSVとかTXTファイルに保存してBULK INSERTした方が速いかもしれません。
だが、少量の場合はINSERT INTOでも大丈夫でしょう。

今回は登録するデータの形式をXML化して登録する方法を説明します。
XML変数には2GBまでデータを保存することができます。

下記のようなテーブルがあるとしましょう。

CREATE TABLE dbo.TempData
(
Col1 varchar(10)
, Col2 varchar(10)
)

「dbo.TempData」テーブルに大量のデータをxml形式で作って登録する方法は下記のとおりです。
まず、登録するデータをxml形式に合わせて作成します。
その後、そのデータを一括でINSERTします。
ですので、データが多ければ多いほど上記のINSERT INTOで処理するより、
下記のようにXML化したデータを一括で登録した方が早いです。

上記のSQLを実行して「dbo.TempData」を作成後、
下記のSQLを実行してデータを登録してみてください。

DECLARE @StrXml xml

SET @StrXml = '
<NewDataSet>
<tbData><Data1>A001</Data1><Data2>B001</Data2></tbData>
<tbData><Data1>A002</Data1><Data2>B005</Data2></tbData>
<tbData><Data1>A101</Data1><Data2>B101</Data2></tbData>
<tbData><Data1>A003</Data1><Data2>B005</Data2></tbData>
</NewDataSet>
'
 
DECLARE @IntDoc int
-- Open
EXEC sp_xml_preparedocument @IntDoc OUTPUT, @StrXml
 
INSERT INTO dbo.TempData (Col1, Col2)
SELECT Data1, Data2
FROM OPENXML(@Intdoc, '/NewDataSet/tbData',2)
WITH (Data1 varchar(10), Data2 varchar(10))
 
-- Close
EXEC sp_xml_removedocument @Intdoc

現在は4件しかないですが、
1000件程度作成して比べてみてくださいね。

コメント