2

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

通过这种方式,我可以获取“事件”中列出的元素,但是如何从“事件”中获取一个更下一级的元素。例如,我将如何获得下面的“CustId”标签?

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

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

我正在使用 SQL Server 2008 R2

4

1 回答 1

2

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

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 文档中的名称完全匹配。'@' 用于选择元素中的属性。使用“../”返回一个级别。

SampleID 在“Ele1”内的第三个“Ele2”元素中获取“id”

于 2013-04-19T05:05:04.727 回答