我在表中有以下XML节点。但是,当我获取数据时,我无法正确读取数据
SELECT Data.value('(/*//Plans/Plan/Coverages/Coverage/Answers/Entry[@key="NumberOfHoldDays"]/value)[1]', 'nvarchar(max)') as PLANA
,Data.value('(/*//Plans/Plan/Coverages/Coverage/Answers/Entry[@key="NumberOfHoldDays"]/value)[2]', 'nvarchar(max)') AS PLANB
,Data.value('(/*//Plans/Plan/Coverages/Coverage/Answers/Entry[@key="NumberOfHoldDays"]/value)[3]', 'nvarchar(max)') AS PLANC
FROM Maintenance
如果我在那里读到上面的XML数据
SNO PLan A PLan B Plan C
1 11 22 33
2 NULL 44 55
Output for above example :
SNO PLan A PLan B Plan C
1 11 22 33
2 NULL 44 55
But now for the above query it shows as below :
SNO PLan A PLan B Plan C
1 11 22 33
2 44 55 NULL
Xml示例如下:
<Plans>
<Plan>
<Coverages>
<Coverage>
<Answers>
<Entry key="NumberOfHoldDays" type="System.String">
<value>5</value>
</Entry>
</Answers>
</Coverage>
</Coverages>
<ID>1</ID>
</Plan>
<Plans>
<Plan>
<Coverages>
<Coverage>
<Answers>
<Entry key="NumberOfHoldDays" type="System.String">
<value>55</value>
</Entry>
</Answers>
</Coverage>
</Coverages>
<ID>2</ID>
</Plan>
<Plans>
<Plan>
<Coverages>
<Coverage>
<Answers>
<Entry key="NumberOfHoldDays" type="System.String">
<value>50</value>
</Entry>
</Answers>
</Coverage>
</Coverages>
<ID>3</ID>
</Plan>
</Plans>
我如何基于ID标记读取XML以获取适当的值,我正在使用类似下面的内容,但是它不起作用
答案 0 :(得分:0)
以下代码有效:
SELECT Data.value('(/*//Plans/Plan[ID="1"]/Coverages/Coverage/Answers/Entry[@key="NumberOfHoldDays"]/value)[1]', 'nvarchar(max)') as PLANA
,Data.value('(/*//Plans/Plan[ID="2"]/Coverages/Coverage/Answers/Entry[@key="NumberOfHoldDays"]/value)[1]', 'nvarchar(max)') AS PLANB
,Data.value('(/*//Plans/Plan[ID="3"]/Coverages/Coverage/Answers/Entry[@key="NumberOfHoldDays"]/value)[1]', 'nvarchar(max)') AS PLANC
FROM Maintenance