需要将 XML 数据从 XML 列提取到其他列

Need to fetch XML data from XML column to other column

我有一个 table 如下所示。我有一个 xml 列,我需要从 XML 标签中获取记录并存储在一个新列中。

Declare @t table (ID Int, xmldata xml)
Insert into @t values (1,'<C>
  <Dir xmlns="$Recycle.Bin" />
  <Dir xmlns="$SysReset" />
  <Dir xmlns="AppData" />
  <File>bootmgr<Size>375</Size></File>
  <File>BOOTNXT<Size>1</Size></File>
  <Dir xmlns="Config.Msi" />
  <Dir xmlns="Documents and Settings" />
  <File>Edge.log<Size>11</Size></File>
  <File>hiberfil.sys<Size>815856</Size></File>
  <Dir xmlns="Intel" />
  <Dir xmlns="MSOCache" />
  <Dir xmlns="PerfLogs" />
  <File>port.txt<Size>1</Size></File>
  <Dir xmlns="Program Files" />
  <Dir xmlns="Program Files (x86)" />
  <Dir xmlns="ProgramData" />
  <Dir xmlns="Recovery" />
  <File>rescuepe.log<Size>1</Size></File>
  <Dir xmlns="System Volume Information" />
  <File>TestAddException.txt<Size>1</Size></File>
  <Dir xmlns="Users" />
  <Dir xmlns="Windows" />
  <Dir xmlns="XLM" />
</C>')

Insert into @t values (2,'<C>
  <Dir xmlns="$RECYCLE.BIN" />
  <Dir xmlns="$SysReset" />
  <File>bootmgr<Size>375</Size></File>
  <File>BOOTNXT<Size>1</Size></File>
  <Dir xmlns="Config.Msi" />
  <Dir xmlns="Documents and Settings" />
  <File>Edge.log<Size>11</Size></File>
  <File>hiberfil.sys<Size>815856</Size></File>
  <Dir xmlns="Intel" />
  <Dir xmlns="MSOCache" />
  <Dir xmlns="PerfLogs" />
  <File>port.txt<Size>1</Size></File>
  <Dir xmlns="Program Files" />
  <Dir xmlns="Program Files (x86)" />
  <Dir xmlns="ProgramData" />
  <Dir xmlns="Recovery" />
  <File>rescuepe.log<Size>1</Size></File>
  <Dir xmlns="System Volume Information" />
  <File>TestAddException.txt<Size>1</Size></File>
  <Dir xmlns="Users" />
  <Dir xmlns="Windows" />
  <Dir xmlns="XLM" />
</C>')

预期输出。

ID      FileName            Size        
1       bootmgr             375 
1       BOOTNXT             1   
1       Edge                11  
1       hiberfil            815856  
1       port                1   
1       rescuepe            1   
1       TestAddException    1   
2       bootmgr             375 
2       BOOTNXT             1   
2       Edge                11  
2       hiberfil            815856  
2       port                1   
2       rescuepe            1   
2       TestAddException    1   

我试过了This link

但是没有用。我从来没有尝试过 XML 有人可以帮忙吗。

select t.ID, 
    c.f.value('text()[1]', 'nvarchar(200)') as filename,
    c.f.value('(Size/text())[1]', 'varchar(50)') as size
from @t as t
cross apply t.xmldata.nodes('C/File') as c(f);