在 xml 方面我完全是个新手。
到目前为止,我有一段 xml,我想从中提取信息,但所有节点名称都是相同的(因此它只获取其中一个,除非另有说明)。
它看起来像这样:
<DocumentElement>
<Screening>
<ScreeningID>2</ScreeningID>
<ScreeningDate>2011-09-13T00:00:00-04:00</ScreeningDate>
<ScreeningResult>1</ScreeningResult>
<ScreeningResultText>Negative</ScreeningResultText>
<TextResult>0</TextResult>
<TextResultText>Not Tested</TextResultText>
<PageNumber>0</PageNumber>
<AddedDate>2015-05-03T16:06:41.71774-04:00</AddedDate>
<UpdateDate>2015-05-03T16:06:41.71774-04:00</UpdateDate>
</Screening>
<Screening>
<ScreeningID>3</ScreeningID>
<ScreeningDate>2011-09-13T00:00:00-04:00</ScreeningDate>
<ScreeningResult>1</ScreeningResult>
<ScreeningResultText>Negative</ScreeningResultText>
<TextResult>1</TextResult>
<TextResultText>Negative</TextResultText>
<PageNumber>9</PageNumber>
<AddedDate>2015-05-03T16:25:21.2904988-04:00</AddedDate>
<UpdateDate>2015-05-03T16:25:21.2904988-04:00</UpdateDate>
</Screening>
我目前正在使用这种代码片段从 TextResult 区域提取信息
Select
answer.value('(/DocumentElement/Screening/TextResult)[1]','int')
From
Answers
但是,这只获取第一部分信息,我知道如果我写这样的内容,它会为我提供第二部分信息,但在另一列上: answer.value('(/DocumentElement/筛选[2]/textResult)[1]','int')
我对此有两个问题: 1. 不一定只有 2 个具有相同名称的节点 - 它可以无限地继续下去。 2.我希望所有信息都集中到一列中。
如有任何帮助,我们将不胜感激!
最佳答案
你可以尝试这样:
SELECT
X.value('.','int') as 'TextResult'
FROM Answers as 'a'
CROSS APPLY a.answer.nodes('/DocumentElement/Screening/TextResult') as answers(X)
<强> SQL Fiddle
关于sql - 选择具有相同名称的节点中的所有信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30019309/