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