かなり大きな xml ファイルから SQL Server にデータをインポートしようとしています。オンラインで検索した後、OpenXML を使用することにしました。私がこれまでに持っているクエリは
DECLARE @doc INT
DECLARE @xml XML
SELECT @xml = evnt
FROM OPENROWSET (BULK 'c:\archive.xml', SINGLE_BLOB) AS Import(evnt)
EXEC sp_xml_preparedocument @doc OUTPUT, @xml
SELECT *
FROM OPENXML( @doc, '/Events/eventData/event', 2)
WITH (
id varchar(max)
)
EXEC sp_xml_removedocument @doc
このようにして、「イベント」内にリストされている要素を取得できますが、「イベント」からさらに 1 レベル下の要素を取得するにはどうすればよいでしょうか。たとえば、以下の「CustId」タグを取得するにはどうすればよいですか?
<event>
<custromAttribute>
<CustId>...
「イベント」内のアイテムが主に必要なため、パスを変更することはできません。また、他のアプローチもいいでしょう。SQL Server から実行する必要があるため、SSIS や他の同様の外部ツールを使用できません。XQuery はかなり時間がかかるようです。
SQL Server 2008 R2 を使用しています