使用XML大量載入元件指令碼將台灣郵政3+2郵遞區號XML檔轉入SQL資料庫

摘要:使用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.

 

  • 執行結果

  • 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"