[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');
想說這樣就搞定了,結果客戶想使用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 '
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^