从包含 XML 的列中获取值

Fetch a value from a column which contains XML

如何从 SQL 服务器中包含 XML 的列中获取值? 下面是我的示例 XML 列值,id 可以随时交换 (101,100) 或 (201,100,101,321)。

<Questions>
 <item id="101">Yes</item>
 <item id="100">No</item>
</Questions>

我想根据 Id 获取一个值。就像从 id=101 中获取 Yes。 非常感谢示例代码。

我尝试使用以下示例,但无法检索值“是”

select Y.value('@item[1]','varchar[3]') as valT from tbl_storeXML s cross apply s.Questions.nodes('Questions/item') as X(Y) where e.empId=256 and Y.value('@id','int')=101

请帮忙解决这个问题。 Ps。这不是家庭作业,我正在学习在 sql 服务器中处理 xml。

value 的使用不正确,您是:

  1. Y.value('@id','int')

这应该是:Y.value('(@id)[1]','int')

Y.value('item[1]','varchar[3]').

这应该是:Y.value('(@item)[1]','varchar(3)').

  • 删除了 @ 因为 item 不是属性

  • varchar 应该有圆括号,而不是方括号。

你的试试,修改后会变成:

select 
   Y.value('(item)[1]','varchar(3)') as valT 
from tbl_storeXML s 
cross apply s.Questions.nodes('Questions/item') as X(Y) 
where e.empId=256 and Y.value('(@id)','int')=101

这个没有测试,因为我没有那些表。 (我确实认为 Y.value('(item)[1]','varchar(3)') 可能需要写成 Y.value('(.)[1]','varchar(3)')

但是在这个DBFIDDLE

中可以看到同样的做法
DECLARE @xml XML = '<Questions>
 <item id="101">Yes</item>
 <item id="100">No</item>
</Questions>';

select 
  X.y.value('(@id)[1]','VARCHAR(20)') id,
  X.y.value('(.)[1]','VARCHAR(20)') value
from  @xml.nodes('Questions/item') as X(y);

输出:

id value
101 Yes
100 No