从 SQL Server 中的动态 XML 层次结构导出数据

问题描述 投票:0回答:1

我想获取动态 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>
sql sql-server xml ssis export
1个回答
0
投票

未提供最小的可重现示例。所以,我是从臀部开始拍摄的。

这里有几种方法。

第一种方法是 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
© www.soinside.com 2019 - 2024. All rights reserved.