首页 > 解决方案 > 如何查询表中的xml数据

问题描述

我有一个包含列 ID 和 XML 的表。XML 列包含 XML 中的数据,但不是 xml 类型,实际上是 varchar。我需要从 ID 列中获取值,并从 xml 列中获取 nazwa_saduPOZEW 值。这是xml结构:

<RootElement>
<DocumentContent>
<Root>
<Pelnomoc_miasto type="SingleValue">xxx</Pelnomoc_miasto>
<data_biezaca type="SingleValue">xxx</data_biezaca>
<nazwa_powoda type="SingleValue">xxx</nazwa_powoda>
<powod_adres_ulica type="SingleValue">xxx</powod_adres_ulica>
<powod_adres_miasto type="SingleValue">xxx</powod_adres_miasto>
<TytulPelnomocnika type="SingleValue">xxx</TytulPelnomocnika>
<imie_nazwisko_pelnomocnikaPOZEW
type="SingleValue">xxx</imie_nazwisko_pelnomocnikaPOZEW>
<nazwa_saduPOZEW type="SingleValue">xxx</nazwa_saduPOZEW>
<nazwa_rozszerzenona_saduPOZEW
type="SingleValue">xxx</nazwa_rozszerzenona_saduPOZEW> 
<sad_adresPOZEW type="SingleValue">xxx</sad_adresPOZEW>
<sad_kod_miastoPOZEW type="SingleValue">xxx</sad_kod_miastoPOZEW>
<sygnatura_sadowa type="SingleValue">xxx</sygnatura_sadowa>
<data_cesji type="SingleValue">xxx</data_cesji>
<wierzytelnosc_numer type="SingleValue">xxx</wierzytelnosc_numer>
<wierzytelnosc_data type="SingleValue">xxx</wierzytelnosc_data>
</Root>
</DocumentContent>
<ToDo>GenerateAndSaveDocument</ToDo>
<OutBoxFolder>xxx</OutBoxFolder>
<czyPodglad>0</czyPodglad>
<TemplatePath>xxx</TemplatePath>
<OutputPath>xxx</OutputPath>
<isPDF>false</isPDF>
<makeWatermark>false</makeWatermark>
</RootElement>

我已经尝试查询该表,并且到目前为止我已经设法获得了一个值 nazwa_saduPOZEW 但仅针对一行并且没有 ID 列(我非常需要此列来加入另一个表)。

这是我的代码:

declare @xmldata XML

select @xmldata=pismo_tagi
from debtmanager_tagi_pism..tagi_pism
where ak_id=4289062

select 
Tabliczka.element.value('nazwa_saduPOZEW[1]','varchar(max)') as 
nazwa_sadu

from @xmldata.nodes ('/RootElement/DocumentContent/Root') as   
Tabliczka(element)

我想要的输出是表中所有行的 ID 列和 xml 列作为 nazwa_saduPOZEW。

标签: tsql

解决方案


试试这个查询:

select ak_id,
xmldata.value('/RootElement[1]/DocumentContent[1]/Root[1]/nazwa_saduPOZEW[1]', 'varchar(max)') as nazwa_sadu
     from (select ak_id, cast(pismo_tagi as XML) as xmldata  from dbo.tagi_pism) as t

它适用于这个数据样本:

create table tagi_pism (ak_id int, pismo_tagi varchar (max))
go
insert tagi_pism
select 4289062, '<RootElement>
<DocumentContent>
<Root>
<Pelnomoc_miasto type="SingleValue">xxx</Pelnomoc_miasto>
<data_biezaca type="SingleValue">xxx</data_biezaca>
<nazwa_powoda type="SingleValue">xxx</nazwa_powoda>
<powod_adres_ulica type="SingleValue">xxx</powod_adres_ulica>
<powod_adres_miasto type="SingleValue">xxx</powod_adres_miasto>
<TytulPelnomocnika type="SingleValue">xxx</TytulPelnomocnika>
<imie_nazwisko_pelnomocnikaPOZEW
type="SingleValue">xxx</imie_nazwisko_pelnomocnikaPOZEW>
<nazwa_saduPOZEW type="SingleValue">xxx</nazwa_saduPOZEW>
<nazwa_rozszerzenona_saduPOZEW
type="SingleValue">xxx</nazwa_rozszerzenona_saduPOZEW> 
<sad_adresPOZEW type="SingleValue">xxx</sad_adresPOZEW>
<sad_kod_miastoPOZEW type="SingleValue">xxx</sad_kod_miastoPOZEW>
<sygnatura_sadowa type="SingleValue">xxx</sygnatura_sadowa>
<data_cesji type="SingleValue">xxx</data_cesji>
<wierzytelnosc_numer type="SingleValue">xxx</wierzytelnosc_numer>
<wierzytelnosc_data type="SingleValue">xxx</wierzytelnosc_data>
</Root>
</DocumentContent>
<ToDo>GenerateAndSaveDocument</ToDo>
<OutBoxFolder>xxx</OutBoxFolder>
<czyPodglad>0</czyPodglad>
<TemplatePath>xxx</TemplatePath>
<OutputPath>xxx</OutputPath>
<isPDF>false</isPDF>
<makeWatermark>false</makeWatermark>
</RootElement>'
union select 4289063, '<RootElement>
<DocumentContent>
<Root>
<Pelnomoc_miasto type="SingleValue">xxx</Pelnomoc_miasto>
<data_biezaca type="SingleValue">xxx</data_biezaca>
<nazwa_powoda type="SingleValue">xxx</nazwa_powoda>
<powod_adres_ulica type="SingleValue">xxx</powod_adres_ulica>
<powod_adres_miasto type="SingleValue">xxx</powod_adres_miasto>
<TytulPelnomocnika type="SingleValue">xxx</TytulPelnomocnika>
<imie_nazwisko_pelnomocnikaPOZEW
type="SingleValue">xxx</imie_nazwisko_pelnomocnikaPOZEW>
<nazwa_saduPOZEW type="SingleValue">yyy</nazwa_saduPOZEW>
<nazwa_rozszerzenona_saduPOZEW
type="SingleValue">yyy</nazwa_rozszerzenona_saduPOZEW> 
<sad_adresPOZEW type="SingleValue">xxx</sad_adresPOZEW>
<sad_kod_miastoPOZEW type="SingleValue">xxx</sad_kod_miastoPOZEW>
<sygnatura_sadowa type="SingleValue">xxx</sygnatura_sadowa>
<data_cesji type="SingleValue">xxx</data_cesji>
<wierzytelnosc_numer type="SingleValue">xxx</wierzytelnosc_numer>
<wierzytelnosc_data type="SingleValue">xxx</wierzytelnosc_data>
</Root>
</DocumentContent>
<ToDo>GenerateAndSaveDocument</ToDo>
<OutBoxFolder>xxx</OutBoxFolder>
<czyPodglad>0</czyPodglad>
<TemplatePath>xxx</TemplatePath>
<OutputPath>xxx</OutputPath>
<isPDF>false</isPDF>
<makeWatermark>false</makeWatermark>
</RootElement>' 

结果是:

ak_id   nazwa_sadu
4289062 xxx
4289063 yyy

推荐阅读