[SQL]為XML加上XML宣告

[SQL]為XML加上XML宣告

同事問我如何把資料轉成如下的XML格式!

<insuranceList>
  <insurance>
    <busid>吉A30241</busid>
    <drivername>高 明</drivername>
    <insurlistnum>PICC12345</insurlistnum>
    <insurchildname>死亡傷殘賠償</insurchildname>
  </insurance>
  .....
</insuranceList>

就使用FOR XML PATH & ROOT就可以了,如下,

1.先建立測試資料

CREATE TABLE T1(
busid NVARCHAR(20)
, drivername NVARCHAR(20)
, insurlistnum NVARCHAR(10)
, insurchildname NVARCHAR(10)
);
--新增資料
INSERT INTO T1
        ( busid ,
          drivername ,
          insurlistnum ,
          insurchildname
        )
VALUES  ( N'吉A30241' ,  
          N'高 明' ,  
          N'PICC12345' ,  
          N'死亡傷殘賠償'  
        )
        ,
        ( N'吉A30241' ,  
          N'高 明' ,  
          N'PICC12345' ,  
          N'醫療費用賠償'  
        )
        ,( N'吉A30241' ,  
          N'高 明' ,  
          N'PICC12345' ,  
          N'財產損失賠償'  
        );

2.使用FOR XML PATH & ROOT來產生XML

SELECT *
FROM T1
FOR XML PATH('insurance'), ROOT('insuranceList');

image

想說這樣就搞定了,結果客戶想使用IE去看XML,所以要加上XML的宣告 <?xml version="1.0" encoding="BIG5" ?>

那只好轉成字串相加了,如下,

SELECT '<?xml version=""1.0"" encoding=""BIG5"" ?>' +
(
SELECT *
FROM T1
FOR XML PATH('insurance'), ROOT('insuranceList')
)

再來就是用BCP轉出檔案

execute master..xp_cmdshell 'bcp "SELECT ''<?xml version=""1.0"" encoding=""BIG5"" ?>'' + (select * from YOURDATABASE.dbo.T1 FOR XML PATH(''insurance''), ROOT(''insuranceList''))" queryout YOUROUTPUTFILE.XML -T -r -t -c '

image

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^