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格式也不同,后面再轉換的語句也不同,記錄一下,省得忘了!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM