我正在学习如何使用 SQL 读取 XML,目前正在努力返回我期望的所需数据。
对于给定的示例,我期望返回值为“Data”的“tagFourData”。相反,我似乎总是得到 NULL
declare @data xml = '<object>
<Overview Requester="Me">
<Request GetData="Y" Title="Get First SQL DataSet in XML" Id="1">
<Detailed tagOne="yap" tagTwo="Yap">
<!--Further elements/attributes if needed -->
</Detailed>
</Request>
<Request GetData="N" Title="Get Second SQL DataSet in XML" Id="2">
<Detailed tagThree="yap" tagFour="Yap">
<!--Further elements/attributes if needed -->
</Detailed>
</Request>
<Request GetData="Y" Title="Get Third SQL DataSet in XML" Id="3">
<Detailed tagFour="Data" tagFive="data2" />
</Request>
</Overview>
</object>'
select @data.value('(object/Overview/Request/Detailed/tagFour/node())[1]', 'nvarchar(max)') as tagFourData
我的 Select 语句的编写方式有问题吗?
最好也寻找一个动态的解决方案。也就是说 tagFour 可能位于完全不同的 Id 下,但结构 Object/Overview/Request/Detailed 始终相同 谢谢你
你很接近:
select @data.value('(object/Overview/Request/Detailed/@tagFour)[1]', 'nvarchar(max)') as tagFourData
需要额外的
@
来指示属性而不是子元素。