需要将 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);
我有一个 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);