Sql 如何从xml字段中提取值
我有一个带有xml的字段,类似这样:Sql 如何从xml字段中提取值,sql,sql-server,xml,Sql,Sql Server,Xml,我有一个带有xml的字段,类似这样: <ApplicationProductFields> <string> <field name="Tech_LoginUzytkownika">lechowski</field> </string> <int /> <decimal /> <bool /> <datetime /> <appendix />
<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>
我发现sql查询此sql查询:
SELECT
col.value('(/ArrayOfEntityPropertyOfString/EntityPropertyOfString[Name="Profit Center"]/Value)[1]', 'int')
FROM tbl
但我不知道如何在xml构造中使用它
有人帮我吗 您所发现的是一个。这种在XML上运行的查询语言有一个相当简单的语法,其中描述了从XML文档访问节点所需的路径。是的,并且以一种更容易访问的方式对其进行了很好的记录
我将让您查看文档,并为您的rodzajPrzesylki
字段提供一个XPath示例:
/ApplicationProductFields/complex/field[name="danePrzesylki"]/fv/rodzajPrzesylki
如果此XML及其生成由您控制,您应该考虑:
ISO8601
。。。您必须手动转换它们CTE
为SELECT
语句提供此表。最后你会看到SELECT*fromCTE代码>。这将提供结果集,就像从普通表中获取一样:
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>';
就放点像这样的东西
INSERT INTO MyTargetTable(FieldName, rodarodzajPrzesylki, ...)
SELECT FieldName,rodzajPrzesylki,...
FROM CTE
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