sql-server - 如何从 SQL Server 中的 XML 列获取所有数据

标签 sql-server xml

我正在尝试从 XML 列中获取数据。这是查询,下面是 xml 列数据

SELECT 
    [PQDAdvice].value('(/Advice//DORowData/PrimaryValue/node())[1]', 'nvarchar(max)') as PrimaryValue,
    [PQDAdvice].value('(/Advice//DORowData/ListValue1/node())[1]', 'nvarchar(max)') as ListValue1
FROM 
    PatQD 
WHERE
    PQDPatID = '4c983bd8-da00-4395-80bb-a383b21313d5' 

XML 内容:

<Advice>
    <DORowData>
        <PrimaryValue>Diet and Nutrition</PrimaryValue>
        <ListValue1>Advice</ListValue1>
    </DORowData>
    <DORowData>
        <PrimaryValue>Salt Restriction</PrimaryValue>
        <ListValue1>Advice</ListValue1>
    </DORowData>
    <DORowData>
        <PrimaryValue>Water Consumption</PrimaryValue>
        <ListValue1>Advice</ListValue1>
    </DORowData>
</Advice>

我遇到的问题是我只得到一列而不是所有列

Primary            |ListValue1
Diet and Nutrition |Advice

而不是

Primary            |ListValue1
Diet and Nutrition |Advice
Salt Restriction   |Advice
Water Consumption  |Advice

最佳答案

DECLARE @xml XML = '
<Advice>
    <DORowData>
        <PrimaryValue>Diet and Nutrition</PrimaryValue>
        <ListValue1>Advice</ListValue1>
    </DORowData>
    <DORowData>
        <PrimaryValue>Salt Restriction</PrimaryValue>
        <ListValue1>Advice</ListValue1>
    </DORowData>
    <DORowData>
        <PrimaryValue>Water Consumption</PrimaryValue>
        <ListValue1>Advice</ListValue1>
    </DORowData>
</Advice>'

SELECT 
    t.c.value('PrimaryValue[1]', 'nvarchar(max)') as PrimaryValue,
    t.c.value('ListValue1[1]', 'nvarchar(max)') as ListValue1
FROM @xml.nodes('Advice/DORowData') t(c)

输出 -

PrimaryValue            ListValue1
----------------------- ------------
Diet and Nutrition      Advice
Salt Restriction        Advice
Water Consumption       Advice

您的查询 -

SELECT
    PrimaryValue = t.c.value('PrimaryValue[1]', 'NVARCHAR(1000)'),
    ListValue1 = t.c.value('ListValue1[1]', 'NVARCHAR(1000)')
FROM PatQD
CROSS APPLY PQDAdvice.nodes('Advice/DORowData') t(c)
where PQDPatID = '4c983bd8-da00-4395-80bb-a383b21313d5' 

关于sql-server - 如何从 SQL Server 中的 XML 列获取所有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34944291/

相关文章:

sql - 删除不必要的索引 - 对 SQL Server 2005 中的查询计划的影响

javascript - 字符编码: â?

c# - 如何在 MVC View 中显示存储过程结果

java - Android随机播放按钮位置onClick

c++简单解析带有属性树的boost xml

sql-server - SQL Server 查询返回多行

php - 如何根据值删除特定的 XML 子节点

android - 为什么这种布局不适用于 Android Studio?

java - 将独立指令添加到 Jackson XML 序列化

sql - 如何避免此子查询并创建索引 View ?