У меня есть очень большой 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]
Я видел этот пост ( Подсчитайте числовложенных тегов из XML в 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
любая помощь будет принята с благодарностью.