SQL Server 中对 FOR XML和FROM的转换处理

在SQL Server中对XML的再操作转换:

方法1:

复制代码
--生成XML 
SELECT * FROM [T_BAS_预算科目] FOR XML PATH

--把XML转成SQL表
declare @XmlData nvarchar(max)
set @XmlData = '<row 科目编码="0" 科目名称="全部" />
<row 科目编码="1" 上级编码="0" 科目名称="功能收入分类" 科目级次="0" 预算年度="2016" 显示级别="0" />
<row 科目编码="101" 上级编码="1" 科目名称="税收收入" 科目级次="1" 预算年度="2016" 显示级别="0" />
<row 科目编码="10101" 上级编码="101" 科目名称="增值税" 科目级次="1" 预算年度="2016" 显示级别="1" />
<row 科目编码="1010101" 上级编码="10101" 科目名称="国内增值税" 科目级次="1" 预算年度="2016" 显示级别="2" />
<row 科目编码="101010101" 上级编码="1010101" 科目名称="国有企业增值税" 科目级次="1" 预算年度="2016" 显示级别="3" />
<row 科目编码="101010102" 上级编码="1010101" 科目名称="集体企业增值税" 科目级次="1" 预算年度="2016" 显示级别="3" />
<row 科目编码="101010103" 上级编码="1010101" 科目名称="股份制企业增值税" 科目级次="1" 预算年度="2016" 显示级别="3" />'

declare @MxDataList xml
set @MxDataList = cast(@XmlData as xml)

SELECT
    C.value('./@科目编码','varchar(30)') as 科目编码,
    C.value('./@上级编码','varchar(30)') as 上级编码,
    C.value('./@科目名称','varchar(30)') as 科目名称,
    C.value('./@科目级次','varchar(30)') as 科目级次
FROM @MxDataList.nodes('/row') T(C)
复制代码

 

方法2:

复制代码
--生成XML 
SELECT * FROM [T_BAS_预算科目] FOR XML RAW

--把XML转成SQL表
declare @XmlData nvarchar(max)
set @XmlData = '<row>
  <科目编码>0</科目编码>
  <科目名称>全部</科目名称>
</row>
<row>
  <科目编码>1</科目编码>
  <上级编码>0</上级编码>
  <科目名称>功能收入分类</科目名称>
  <科目级次>0</科目级次>
  <预算年度>2016</预算年度>
  <显示级别>0</显示级别>
</row>
<row>
  <科目编码>101</科目编码>
  <上级编码>1</上级编码>
  <科目名称>税收收入</科目名称>
  <科目级次>1</科目级次>
  <预算年度>2016</预算年度>
  <显示级别>0</显示级别>
</row>'

declare @MxDataList xml
set @MxDataList = cast(@XmlData as xml)

SELECT
    C.value('(*)[1]','varchar(30)') as 科目编码,
    C.value('(*)[2]','varchar(30)') as 上级编码,
    C.value('(*)[3]','varchar(30)') as 科目名称,
    C.value('(*)[4]','varchar(30)') as 科目级次
FROM @MxDataList.nodes('/row') T(C)
复制代码

 

以上两种方法,随着 FOR XML后面的参数不同,生成的XML格式也不同,后面再转换的语句也不同,记录一下,省得忘了!!!

posted @   海洋风g  阅读(1670)  评论(2编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
点击右上角即可分享
微信分享提示