【发布时间】:2019-06-05 12:52:46
【问题描述】:
我有一个非常大的 XML 文档,我将其加载到 SQL 中,然后尝试解析以添加到现有表的末尾。
到目前为止,我的代码是: '
INSERT INTO XMLAttempt1(XMLData, LoadedDateTime)
SELECT CONVERT(XML, Bulkcolumn) AS Bulkcolumn, getdate()
from openrowset(bulk 'filepath.xml', Single_clob) as x;
select * from XMLAttempt1
DECLARE @XML as XML, @hdoc int, @doc nvarchar(MAX);
SELECT @xml = XMLDATA FROM XMLAttempt1;
EXEC sp_xml_preparedocument @hdoc OUTPUT, @XML;
Select *
FROM OPENXML (@hdoc, 'CxXMLResults/Query/Result', 1)
WITH (ID int '../@id',
@NodeId INT @NodeId',
ProjectID int '../../@ProjectId',
ScanId int '../../@ScanId');
XML 格式为:
<Result NodeId="635920047" lots of other info>
<Path ResultId="63592" PathId="47" SimilarityId="-1924977021">
<PathNode>
<FileName></FileName>
<Line>292</Line>
<Column>82</Column>
<NodeId>1</NodeId>
<Name>SelectedValue</Name>
<Type></Type>
<Length>13</Length>
<Snippet>
<Line>
<Number>292</Number>
<Code> stuff;</Code>
</Line>
</Snippet>
</PathNode>
[next x numbers of PathNode]
</Path>
</Result>
<Result NodeId="635920048"
[etc until the next QueryId]
我看过这篇文章 (Count the number of sub tags from XML in SQL),但我无法让它工作,我认为这是因为我试图使用它 - 我的语法不正确。
DECLARE @XML as XML, @hdoc int, @doc nvarchar(MAX);
SELECT @xml = XMLDATA FROM XMLAttempt1;
EXEC sp_xml_preparedocument @hdoc OUTPUT, @XML;
Select *
FROM OPENXML (@hdoc, 'CxXMLResults/Query/Result', 1)
WITH (ID int '../@id',
@XML.query('count(@NodeId') INT '@NodeId',
ProjectID int '../../@ProjectId',
ScanId int '../../@ScanId');
但它在@XML 处显示不正确的语法
当前结果:
ID NodeID ProjectID ScanId
427 635920047 20336 63592
427 635920048 20336 63592
427 635920049 20336 63592
427 635920050 20336 63592
427 635920051 20336 63592
427 635920052 20336 63592
我想结束的是:
ID Count ofNodes ProjectID ScanId
427 6 20336 63592
任何帮助将不胜感激。
【问题讨论】:
标签: sql sql-server xml tsql