[英]How to extract value from xml field
我有一个带有xml的字段,如下所示:
<ApplicationProductFields>
<string>
<field name="Tech_LoginUzytkownika">lechowski</field>
</string>
<int />
<decimal />
<bool />
<datetime />
<appendix />
<enum />
<complex>
<field name="danePrzesylki">
<fv>
<rodzajPrzesylki>sPP</rodzajPrzesylki>
<dataWplywu>d08/24/2016 00:00:00</dataWplywu>
<nadawcaNazwisko>sKowalski</nadawcaNazwisko>
<dokumenty>
<tytulDokumentu>sDokument testowy 45</tytulDokumentu>
<dataUtworzenia>d2016-06-13 00:00:00</dataUtworzenia>
我需要将所有值插入不同的表格字段中,例如。
|rodzajPrzesylki| dataWplywu |nadawcaNazwisko| tytulDokumentu |...
| sPP |d08/24/2016 00:00:00| sKowalski |sDokument testowy |...
我发现这个SQL查询SQL查询:
SELECT
col.value('(/ArrayOfEntityPropertyOfString/EntityPropertyOfString[Name="Profit Center"]/Value)[1]', 'int')
FROM tbl
但是我不知道如何在我的xml结构中使用它。
有人帮我吗?
如果此XML及其生成受您控制,则应考虑一下:
XML生成不正确。 XML中的日期/时间值应遵循ISO8601
...您必须手动将其转换。
我认为,第一个字母(“ sPP”或“ d08 / 24 ...”)有点像数据类型标记(字符串和日期),这是非常不专业的...如果您想标记此标记,更好使用类型属性或模式...
您提供的XML并不完整(我不得不用一些标签关闭XML),也没有显示目标表的结构。 无论如何:要做的第一件事是切碎XML。 这将创建一个派生表 。 在我的示例中,我将使用CTE
为SELECT
语句提供此表。 最后,您会看到SELECT * FROM CTE;
。 这将提供结果集,就好像它是从普通表中获取的一样:
DECLARE @xml XML=
N'<ApplicationProductFields>
<string>
<field name="Tech_LoginUzytkownika">lechowski</field>
</string>
<int />
<decimal />
<bool />
<datetime />
<appendix />
<enum />
<complex>
<field name="danePrzesylki">
<fv>
<rodzajPrzesylki>sPP</rodzajPrzesylki>
<dataWplywu>d08/24/2016 00:00:00</dataWplywu>
<nadawcaNazwisko>sKowalski</nadawcaNazwisko>
<dokumenty>
<tytulDokumentu>sDokument testowy 45</tytulDokumentu>
<dataUtworzenia>d2016-06-13 00:00:00</dataUtworzenia>
</dokumenty>
</fv>
</field>
</complex>
</ApplicationProductFields>';
-查询
WITH CTE AS
(
SELECT fld.value(N'@name','nvarchar(max)') AS FieldName
,fld.value(N'(fv/rodzajPrzesylki)[1]','nvarchar(max)') AS rodzajPrzesylki
,fld.value(N'(fv/dataWplywu)[1]','nvarchar(max)') AS dataWplywu
,fld.value(N'(fv/nadawcaNazwisko)[1]','nvarchar(max)') AS nadawcaNazwisko
,fld.value(N'(fv/dokumenty/tytulDokumentu)[1]','nvarchar(max)') AS tytulDokumentu
,fld.value(N'(fv/dokumenty/dataUtworzenia)[1]','nvarchar(max)') AS dataUtworzenia
FROM @xml.nodes(N'/ApplicationProductFields/complex/field') AS A(fld)
)
SELECT * FROM CTE;
像这样放些东西
INSERT INTO MyTargetTable(FieldName, rodarodzajPrzesylki, ...)
SELECT FieldName,rodzajPrzesylki,...
FROM CTE
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.