我正在尝试从 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/