步驟如下:
一、到國家統計局網站,找到縣及縣以上行政區劃頁面。
我找到的是這個:http://www.stats.gov.cn/tjbz/xzqhdm/t20130118_402867249.htm
然後將頁面上的代碼直接複製粘貼到記事本,儲存為 e:\temp\region.txt。
(注意複製時,可能是受記憶體限制,不一定能一次性複製完全所有內容,注意確認一下。)
複製粘貼的結果,讓我傻眼了:
居然是郵遞區號與名稱各自一行的。手動改成一行?寫個程式來糾正?蚊子都睡了。
二、硬著頭皮用SQL SERVER Management Studio導進去。
匯入的時候注意一點,就是要在目標表裡設定一個識別欄位。
三、產生地區表
在這裡導進去的目標表,只是一個臨時用的中間表:region_tmp,我真正要的,是表region。
中間表region_tmp的結構:
region_tmp
======================
id int identity(1,1)
cn varchar(50)
導進去以後,資料如下:
而我想要的地區表region
region
=========================
id int identity(1,1)
code char(6)
name nvarchar(50)
parentId int
所以現在需要將資料再從region_tmp ==> region。
在匯入的時候,之所以要設定一個識別欄位,就是用來區分郵遞區號和地名。在region_tmp,奇數行都是編碼,偶數行則是地名,因此可以通過以下語句將編碼和地名都寫進region的同一行:
INSERT INTO [dbo].[Region] ([code] ,[name] ,[parentId])SELECT a.cn,b.cn,0FROM region_tmp a,region_tmp bWHERE b.id=a.id+1and (a.id % 2) = 1
四、修改地區表
現在要修改欄位region.parentId。就是每個地名記錄要有一個父ID,在使用的時候好排序。比如廣州的父ID是廣東省,天河區的父ID是廣州。
--設定市級地名的父IDUPDATE [dbo].[region]SET parentid=b.idFROM [region],[region] bWHERE LEFT([region].code,2)=LEFT(b.code,2)AND RIGHT([region].code,4)<>'0000' AND RIGHT([region].code,2)='00'AND RIGHT(b.code,4)='0000';--設定縣級地名的父IDUPDATE [dbo].[region]SET parentid=b.idFROM [region],[region] bWHERE LEFT([region].code,4)=LEFT(b.code,4)AND RIGHT([region].code,2)!='00'AND RIGHT(b.code,2)='00';
有些記錄不符合使用習慣,修改後刪掉
UPDATE [dbo].[region] SET parentId=c.IdFROM [dbo].[region],[dbo].[region] b,[dbo].[region] cWHERE [dbo].[region].parentId=b.id AND b.parentId=c.idAND b.name IN('市轄區','縣') ;DELETE FROM [dbo].[region] WHERE name IN('市轄區','縣') ;