摘要:使用XML大量載入元件指令碼將台灣郵政3+2郵遞區號XML檔轉入SQL資料庫
我因為工作的關係,需要在SQL Server上建立3+2郵遞區號資料表,但如果要將檔案格式架構一模一樣的XML檔匯入SQL資料庫,還要寫一大串程式豈不就有點麻煩,於是自己弄了個VBScript並寫個相對應的XML Schema,這樣就能夠快速將資料匯入資料庫了。
這個VBScript主要是使用「XML大量載入」元件的指令碼,把台灣郵政所釋出的3+2郵遞區號資料XML檔(zip32_9704.xml),比對自定義的XML資料庫結構的方式,將資料寫入SQL Server資料庫中的zip32資料表。
3+2郵遞區號資料XML檔,可自行到台灣郵政下載專區Download.
- 台灣郵政下載專區 http://www.post.gov.tw/post/internet/down/index.jsp
- 此篇文章範例檔下載 點此下載
- 執行結果
- SQL Schema
CREATE TABLE [dbo].[Zip32]( [ZipCode] [varchar](6) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL, [City] [varchar](20) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL, [Area] [varchar](20) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL, [Road] [varchar](30) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL, [Scoop] [varchar](50) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ) ON [PRIMARY] GO
- 程式碼 zip32mapping.xml //與Zip32資料表對應的架構檔案
<?xml version="1.0" ?> <Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:xml:datatypes" xmlns:sql="urn:schemas-microsoft-com:xml-sql" > <ElementType name="zipcode" dt:type="string" /> <ElementType name="city" dt:type="string" /> <ElementType name="area" dt:type="string" /> <ElementType name="road" dt:type="string" /> <ElementType name="scoop" dt:type="string" /> <ElementType name="ROOT" sql:is-constant="1"> <element type="zip32" /> </ElementType> <ElementType name="zip32" sql:relation="zip32"> <element type="zipcode" sql:field="zipcode" /> <element type="city" sql:field="city" /> <element type="area" sql:field="area" /> <element type="road" sql:field="road" /> <element type="scoop" sql:field="scoop" /> </ElementType> </Schema>
- 程式碼 importZip32.vbs
Set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkLoad") objBL.ConnectionString = "provider=SQLOLEDB;Data Source=YourSQLServer;Initial Catalog=YourDataBase;Integrated Security=SSPI" objBL.ErrorLogFile = "c:\error.log" objBL.Execute "c:\zip32mapping.xml", "c:\zip32_9704.xml" //zip32_9704.xml是台灣郵政提供的郵遞區號XML資料庫 MsgBox "XML Import Success"