簡體   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