如何使用OpenXML访问xml中的嵌套元素

时间:2013-04-18 09:11:43

标签: xml sql-server-2008-r2 openxml xml-import

我正在尝试将数据从相当大的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

通过这种方式,我可以在'event'中列出元素,但是我如何从'event'中获得一个元素。 例如,我如何获得下面的'CustId'标签?

<event>
    <custromAttribute>
        <CustId>...

主要需要'event'中的项目,因此路径无法更改。 任何其他方法也会很好。我需要它从SQL Server运行,所以不能使用SSIS或其他类似的外部工具。 XQuery似乎需要花费很多时间。

我正在使用SQL Server 2008 R2

1 个答案:

答案 0 :(得分:1)

如果有人有兴趣,上述问题的解决方案很简单。

SELECT *
FROM OPENXML( @doc, '/Events/eventData/event')
WITH (
  ID varchar(max) 'id'
  CustID varchar(20) 'customAttribute/CustId',
  AttributeID varchar(20) '@id'
  SampleID varhcar(20) 'Ele1/Ele2[3]/id'
)

引号中的值应与xml doc中的名称完全匹配。 '@'用于选择元素中的属性。回到一个级别是用'../'完成的。

SampleID在'Ele1'

内的第三个'Ele2'元素中提取'id'