![](/img/trans.png)
[英]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.