我想获取动态 XML 文件中层次结构中的最低值。
我尝试编写一个动态表达式来读取 XML 文件:
patdata.value('(*[local-name() = sql:column("DataMng.Root")]/*[local-name() = sql:column("textMng.FieldId")]/text())[1]', 'nvarchar(max)')
DataMng.Root='rc0036'
FieldId='s4356/L4356/F4357'
但我得到 **NULL ** 尽管此 XML 文件有价值。
当我写下以下表达式时,我得到了我想要的输出:
patdata.value('(*[local-name() = sql:column("DataMng.Root")]/s4356/L4356/F4357/text())[1]', 'nvarchar(max)')
有 XML 文件:
<rc0036>
<F2739>9893</F2739>
<F2740>12</F2740>
<F2741>ד"ר נאג'ד יאסין</F2741>
<F0242>16/04/2024</F0242>
<F5453>16/04/2024</F5453>
<F4301>16/04/2024</F4301>
<F5454>מרינה</F5454>
<F1209>מרינה</F1209>
<F1903>מעקב זקיקים</F1903>
<F0984>מרינה</F0984>
<F0308>01/04/2024</F0308>
<F0415>וגינלי</F0415>
<F2966>טיפול</F2966>
<s4356>
<L4356 line="1">
<F0418>16/04/2024</F0418>
<F0462>16</F0462>
<F0071>100</F0071>
<F0987>בינוני</F0987>
<F4357>5</F4357>
<F4357>6</F4357>
<F1617>מרינה</F1617>
<F1013/>
</L4356>
</s4356>
</rc0036>
未提供最小的可重现示例。所以,我是从臀部开始拍摄的。
这里有几种方法。
第一种方法是 hack。
第二种方法更可靠。它使用 XQuery FLWOR 表达式。
SQL
DECLARE @xml XML =
N'<rc0036>
<F2739>9893</F2739>
<F2740>12</F2740>
<F0242>16/04/2024</F0242>
<F5453>16/04/2024</F5453>
<F4301>16/04/2024</F4301>
<F5454>מרינה</F5454>
<F1209>מרינה</F1209>
<F1903>מעקב זקיקים</F1903>
<F0984>מרינה</F0984>
<F0308>01/04/2024</F0308>
<F0415>וגינלי</F0415>
<F2966>טיפול</F2966>
<s4356>
<L4356 line="1">
<F0418>16/04/2024</F0418>
<F0462>16</F0462>
<F0071>100</F0071>
<F0987>בינוני</F0987>
<F4357>5</F4357>
<F4357>6</F4357>
<F1617>מרינה</F1617>
<F1013/>
</L4356>
</s4356>
</rc0036>';
SELECT @xml.value('min(//*)', 'INT') AS result;
SELECT @xml.query('
for $x in min(//*[xs:int(text()[1]) instance of xs:int])
return $x
').value('.', 'INT') AS result;
SELECT REPLACE(@xml.query('data(/rc0036/s4356/L4356/F4357)')
.value('.', 'VARCHAR(20)'), SPACE(1),',') AS result;
输出#1
结果 |
---|
5 |
输出#2
结果 |
---|
5,6 |