iT邦幫忙

0

[SQL] 讀 XML 格式文件寫入 SQL table

  • 分享至 

  • xImage
  •  

範例 XML 檔案格式內容如下,想抓 XML 幾個欄位的資料寫入 table 中,SQL 語法如下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 函 SYSTEM "104_2_utf8.dtd" [
<!ENTITY 表單 SYSTEM "0001132A00.sw" NDATA DI>
<!NOTATION DI SYSTEM "">
<!NOTATION _X SYSTEM "">
]>
<函>
	<發文機關>
		<全銜>財團法人中華民國xxx基金會</全銜>
		<機關代碼>XC12345678</機關代碼>
	</發文機關>
	<函類別 代碼="函"/>
	<地址>10066臺北市中正區南海路x號x樓</地址>
	<聯絡方式>承辦人:XXX</聯絡方式>
	<聯絡方式>電話:02-12345678分機123</聯絡方式>
	<聯絡方式>電子信箱:XXX@sfi.org.tw</聯絡方式>
	<受文者>
		<交換表 交換表單="表單">如正副本行文單位</交換表>
	</受文者>
	<發文日期>
		<年月日>中華民國109年9月8日</年月日>
	</發文日期>
	<發文字號>
		<字>證基</字>
		<文號>
			<年度>109</年度>
			<流水號>1234567</流水號>
		</文號>
	</發文字號>
	<速別 代碼="普通件"/>
	<密等及解密條件或保密期限>
		<密等/>
		<解密條件或保密期限></解密條件或保密期限>
	</密等及解密條件或保密期限>
	<附件>
		<文字>無</文字>
	</附件>
	<主旨>
		<文字>臺灣xxx交易所委託本基金會辦理「上市櫃公司xxx研討會」,敬邀貴公司董事、監察人、公司治理主管與高階主管參加,請查照。</文字>
	</主旨>
	<段落 段名="說明:">
		<文字></文字>
		<條列 序號="一、">
			<文字>為協助上市櫃公司如何有效運用衍生性商品避險以因應系統性風險、匯率風險及原物料成本波動風險等,使企業高層了解衍生性商品避險交易之重要。臺灣期貨交易所委託本基金會辦理本活動,全程參與之董監事及公司治理主管於活動結束後提供進修時數認證,每家上市上櫃及興櫃公司至多得報名三位。</文字>
		</條列>
		<條列 序號="二、">
			<文字>辦理時間地點如下:</文字>
			<條列 序號="(一)">
				<文字>時間:109年10月10日(週三)下午2時</文字>
			</條列>
			<條列 序號="(二)">
				<文字>地點:xxx會議中心感恩廳(台北市忠孝東路x段x號x樓,台北市忠孝東路與建國南路交叉口-xx大樓x樓)</文字>
			</條列>
		</條列>
		<條列 序號="三、">
			<文字>本活動請至本基會網站(https://www.xxx.org.tw)報名,額滿為止,敬請踴躍報名參加。</文字>
		</條列>
	</段落>
	<正本>
		<全銜>上市上櫃公司(含興櫃)</全銜>
	</正本>
	<副本>
		<全銜>臺灣xx股份有限公司</全銜>
	</副本>
</函>
--新增要將 XML 讀到資料寫入用的 table
CREATE TABLE [dbo].[OD](
	[ODid] [nvarchar](20) NOT NULL,
	[ODdate] [nvarchar](20) NULL,
	[ODgov] [nvarchar](50) NULL,
	[ODtopic] [nvarchar](100) NULL,
 CONSTRAINT [PK_OD] PRIMARY KEY CLUSTERED 
(
	[ODid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
--讀取 XML 檔寫入 MSSQL table
insert into OD ( ODid, ODdate, ODgov, ODtopic )
select
		ODid.文號.query('年度').value('.', 'VARCHAR(20)') + ODid.文號.query('流水號').value('.', 'VARCHAR(20)') + ODid.文號.query('支號').value('.', 'VARCHAR(20)'),
		ODdate.發文日期.query('年月日').value('.', 'VARCHAR(20)'),				
		ODgov.發文機關.query('全銜').value('.', 'VARCHAR(50)'),
		ODtopic.主旨.query('文字').value('.', 'VARCHAR(100)')
from (select CONVERT(XML, MY_XML, 2)
		from OPENROWSET(BULK 'C:\test.xml', SINGLE_BLOB) as T(MY_XML)) as T(MY_XML)
		cross apply MY_XML.nodes('函/發文字號/文號') as ODid (文號)
		cross apply MY_XML.nodes('函/發文日期') as ODdate (發文日期)
		cross apply MY_XML.nodes('函/發文機關') as ODgov (發文機關)
		cross apply MY_XML.nodes('函/主旨') as ODtopic (主旨);


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言