sql - 选择具有相同名称的节点中的所有信息

标签 sql sql-server xml nodes

在 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/

相关文章:

mysql - HQL:计算集合中的空值

sql-server - 在存在语句中使用表变量

android - Imageview 变得模糊

Python 在使用 etree 时不编辑 XML

mysql - 从表中按顺序显示记录而不依赖于表的 id?

sql - 在 VB.Net 中使用 SQL 连接到 Access 数据库

c# - LINQ - 不返回与 SQL Server 相同的值

sql - 插入临时表并创建 IDENTITY 字段,而不首先声明临时表?

php - 如何使用 PHP/PDO 从 Ubuntu 创建到 SQL Server 的加密连接

python - odoo (openerp) 中的字段错误?