[英]How to order by date when a column is of type nvarchar in Microsoft SQL Server
[英]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.