zoukankan      html  css  js  c++  java
  • 将行政区域导入SQL SERVER

    步骤如下:

    一、到国家统计局网站,找到县及县以上行政区划页面。

    我找到的是这个:http://www.stats.gov.cn/tjbz/xzqhdm/t20130118_402867249.htm

    然后将页面上的代码直接复制粘贴到记事本,保存为 e: emp egion.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,0
    	FROM region_tmp a,region_tmp b
    	WHERE b.id=a.id+1
    	and (a.id % 2) = 1

    四、修改区域表

    现在要修改字段region.parentId。就是每个地名记录要有一个父ID,在使用的时候好排序。比如广州的父ID是广东省,天河区的父ID是广州。

    --设置市级地名的父ID
    UPDATE [dbo].[region]
    	SET parentid=b.id
    	FROM [region],[region] b
    	WHERE 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';
    		
    --设置县级地名的父ID
    UPDATE [dbo].[region]
    	SET parentid=b.id
    	FROM [region],[region] b
    	WHERE 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.Id
    	FROM [dbo].[region],[dbo].[region] b,[dbo].[region] c
    	WHERE [dbo].[region].parentId=b.id AND b.parentId=c.id
    	AND b.name IN('市辖区','县') ;
    	
    DELETE FROM [dbo].[region] WHERE name IN('市辖区','县') ;






  • 相关阅读:
    dp,路径保存,最大公共上升子序列——ZOJ
    简单dp——HDU
    扫描线,线段树,离散化——HDU
    c++版本的opencv3.4.1里分类器输出值异常
    win10家庭版openssh连接远程服务器显示connetion reset
    生活感悟一
    Teradata简介
    kettle 无法正常启动问题
    kettle实现同构单表增量同步
    kettle数据库连接使用变量
  • 原文地址:https://www.cnblogs.com/leftfist/p/4258008.html
Copyright © 2011-2022 走看看