【发布时间】:2020-11-23 03:11:52
【问题描述】:
我正在寻找我不确定引用数组字段的语法。请问有人可以帮助我吗?
【问题讨论】:
标签: sql-server xml tsql
我正在寻找我不确定引用数组字段的语法。请问有人可以帮助我吗?
【问题讨论】:
标签: sql-server xml tsql
你可以试试这个:
DECLARE @data XML = '--your--XML--here';
SELECT
XC.value('(FLD[@NM="TOTAL POLICY PREM"])[1]', 'decimal(16,2)'),
XC2.value('(./@NM)[1]', 'varchar(50)'),
XC2.value('(ARRAYVALUE)[2]', 'varchar(20)')
FROM
@data.nodes('/POLOUTPUTS') AS XT(XC)
CROSS APPLY
xc.nodes('FLDARRAY') AS XT2(XC2)
WHERE
XC2.value('(./@NM)[1]', 'varchar(50)') = 'PAY PLAN POLI PREM ARR'
第一个.nodes() 调用返回每个<POLOUTPUTS> 元素的XML 片段列表,您可以从中获取<FLD> 的值和TOTAL POLICY PREM 属性值。
第二个嵌套的.nodes() 调用返回<POLOUTPUTS> 元素内每个<FLDARRAY> 元素的XML 片段列表 - 并且从中可以获取NM 属性的值(用于在WHERE 子句),以及其中第二个 <ARRAYVALUE> 元素的值。
【讨论】:
declare @x xml = N'<POLOUTPUTS>
<FLD NM="MAXIMUM DRIVER AGE">43.59</FLD>
............
<FLD NM="RED MOUNTAIN SCORE MAX">735</FLD>
<FLD NM="TOTAL POLICY PREM">1678.37</FLD>
<FLD NM="VEH MIN BI IND" />
<FLDARRAY NM="PAY PLAN DESCR ARR">
.............
<ARRAYVALUE>0</ARRAYVALUE>
</FLDARRAY>
<FLDARRAY NM="PAY PLAN POLI PREM ARR">
<ARRAYVALUE>1678.37</ARRAYVALUE>
<ARRAYVALUE>1621.54</ARRAYVALUE>
<ARRAYVALUE>1635.74</ARRAYVALUE>
...............
<ARRAYVALUE>0</ARRAYVALUE>
</FLDARRAY>
</POLOUTPUTS>'
select
@x.value('(POLOUTPUTS/FLD[@NM="TOTAL POLICY PREM"])[1]', 'decimal(9,2)'),
@x.value('(POLOUTPUTS/FLDARRAY[@NM="PAY PLAN POLI PREM ARR"]/ARRAYVALUE[2])[1]', 'decimal(9,2)');
【讨论】: