繁体   English   中英

nvarchar类型时,如何在xml列中获取值

[英]how to get values inside an xml column, when it's of type nvarchar

我的问题类似于此问题:除了列的类型不是XML,而是子类的nvarchar(max)之外, 根据子元素的最大值选择SQL Server中的XML节点

我想从看起来像这样的列中提取XML节点值:

<Data>
<el1>1234</el1>
<el2>Something</el2>
</Data>

如何提取值“ 1234”和“其他”?

执行转换并使用col.nodes无法正常工作。 CONVERT(XML,table1.col1).value('((/ Data / el1)[1]','int')as'xcol1',

之后,我想与另一列进行el1(1234)的比较值,并按原样更新update el1。 现在,我正尝试在通过更新时重建XML:即

Update table set col1 ='<Data><el1>'+@col2+'</el1><el2>???</el2>

您必须告诉SQL Server您要访问的节点的编号,例如:

(/Data/el1)[1]
           ^^^

完整示例:

declare @t table (id int, col1 varchar(max))
insert @t values (1, '<Data><el1>1234</el1><el2>Something</el2></Data>')

select  CAST(col1 as xml).value('(/Data/el1)[1]', 'int')
from    @t

--> 
1234

SQL Server提供了一个modify功能来更改XML列。 但是我认为您只能在xml类型的列上使用它。 这是一个例子:

declare @q table (id int, col1 xml)
insert @q values (1, '<Data><el1>1234</el1><el2>Something</el2></Data>')

update  @q
set     col1.modify('replace value of (/Data/el1/text())[1] with "5678"')

select  *
from    @q

-->
<Data><el1>5678</el1><el2>Something</el2></Data>

归根结底,SQL Server的XML支持使简单的事情变得非常困难。 如果您重视可维护性,那么最好在客户端处理XML。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM