tsql - 如何查询表中的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。
解决方案
试试这个查询:
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
推荐阅读
- authentication - “使用 Google 登录”按钮的 data-login_uri 属性使用什么?
- flutter - 我需要解释为什么这行代码会阻止我的进度加载器显示以及如何修复它
- r - 如何使数据框变量的列名
- kubernetes - Kubernetes 集群管理员如何创建 VolumeSnapshotContents?
- html - 按钮单击时的 CSS 动画仅播放一次,在移动浏览器上第二次单击时不播放
- ef-core-3.1 - 导航属性不使用 BulkInsert() 保存
- xamarin.forms - 可以在 Xamarin 表单中制作上拉菜单吗?
- arrays - VBA excel:按日期过滤并将Criteria2值分配给变量?
- algorithm - 算法的通用方式的时间复杂度推导过程
- automated-tests - cy.task 不执行更新