我试图检索作为xml数据类型存储在sql server列中的xml节点的值。例如,我的xml列数据是:
<fields>
<field id="StudentName">John Smith</field>
<field id="StudentID">1310021003</field>
<field id="SchoolName">Little Kid Elementary School</field>
</fields>
我要拿回StudentID。当我运行下面的脚本时,我会得到null。
select MyColumnName.value('(/fields/field/@StudentID)[1]', 'varchar(20)') as StudentId from MyTable
额外的问题-如果可能的话,我还想通过学生查询表格,例如:select * from MyTable where MyColumnName.value('(/fields/field/@StudentID)[1]', 'varchar(20)') = '1310021003'
发布于 2013-11-05 22:23:32
首先,这将是测试环境:
declare @MyTable table (MyColumnName xml)
insert into @MyTable
select '<fields>
<field id="StudentName">John Smith</field>
<field id="StudentID">1310021003</field>
<field id="SchoolName">Little Kid Elementary School</field>
</fields>' union all
select '<fields>
<field id="StudentName">John Smith</field>
<field id="StudentID">2343343434</field>
<field id="SchoolName">Little Kid Elementary School</field>
</fields>'
要从xml中获取数据,请使用value()
函数:
select
MyColumnName.value('(fields/field[@id="StudentID"]/text())[1]', 'nvarchar(max)') as StudentID
from @MyTable
产出:
StudentID
-----------
1310021003
2343343434
若要通过xml数据进行筛选,请使用exist()
函数。
select
*
from @MyTable
where MyColumnName.exist('fields/field[@id="StudentID" and text()=1310021003]') = 1
产出:
MyColumnName
-----------
<fields>
<field id="StudentName">John Smith</field>
<field id="StudentID">1310021003</field>
<field id="SchoolName">Little Kid Elementary School</field>
</fields>
https://stackoverflow.com/questions/19801867
复制相似问题