Я хочу прочитать XML с пути диска, используя SQL-запрос в табличном формате.ниже приведен мой XML-код:
в приведенном ниже коде, у меня есть проблема с разделением записей из идентификатора опции, QuestionID, как прикреплено ниже.PNG.
У меня есть этот тип многих XML, которые яхочу получить дамп в базе данных напрямую.
<Root>
<DeviceType>A</DeviceType>
<PregnancyId>1</PregnancyId>
<Questions>
<Question>
<QuestionId>1</QuestionId>
<QuestionInputTypeId>1</QuestionInputTypeId>
<SubQuestionId>0</SubQuestionId>
<Options>
<Option>
<DropdownOptionId>0</DropdownOptionId>
<OptionId>5</OptionId>
<OptionValue>Very good</OptionValue>
</Option>
<Option>
<DropdownOptionId>0</DropdownOptionId>
<OptionId>6</OptionId>
<OptionValue>Very good</OptionValue>
</Option>
</Options>
</Question>
<Question>
<QuestionId>2</QuestionId>
<QuestionInputTypeId>1</QuestionInputTypeId>
<SubQuestionId>0</SubQuestionId>
<Options>
<Option>
<DropdownOptionId>0</DropdownOptionId>
<OptionId>7</OptionId>
<OptionValue>Life, in general</OptionValue>
</Option>
</Options>
</Question>
</Questions>
<QuizTypeId>5</QuizTypeId>
<UserId>10</UserId>
</Root>
Я подготовил запрос ниже, но не получил точного вывода.
DECLARE @XMLwithOpenXML TABLE
(
Id INT IDENTITY PRIMARY KEY,
XMLData XML,
LoadedDateTime DATETIME
)
INSERT INTO @XMLwithOpenXML(XMLData, LoadedDateTime)
SELECT CONVERT(XML, BulkColumn) AS BulkColumn, GETDATE()
FROM OPENROWSET(BULK 'D:\new_6.xml', SINGLE_BLOB) AS x;
SELECT * FROM @XMLwithOpenXML
DECLARE @XML AS XML, @hDoc AS INT, @SQL NVARCHAR (MAX)
SELECT @XML = XMLData FROM @XMLwithOpenXML
EXEC sp_xml_preparedocument @hDoc OUTPUT, @XML
SELECT DeviceType, PregnancyId, QuestionId, QuestionInputTypeId,
SubQuestionId, DropdownOptionId, OptionId, OptionValue,
QuizTypeId, UserId
FROM OPENXML(@hDoc, 'Root/DeviceType')
WITH
(
DeviceType varchar(200) '../DeviceType',
PregnancyId varchar(200) '../PregnancyId',
QuestionId varchar(200) 'QuestionId',
QuestionInputTypeId varchar(200) 'QuestionInputTypeId',
SubQuestionId varchar(200) 'SubQuestionId',
DropdownOptionId varchar(200) 'DropdownOptionId',
OptionId varchar(200) 'OptionId',
OptionValue varchar(200) 'OptionValue',
QuizTypeId varchar(200) 'QuizTypeId',
UserId varchar(200) 'UserId'
)
EXEC sp_xml_removedocument @hDoc
GO
Я хочу вывод в SQL, как показано ниже:
![enter image description here](https://i.stack.imgur.com/5DfoH.png)