快速将珊瑚虫IP数据库转MS SQL2005的图文教程

2016-02-19 11:14 14 1 收藏

下面,图老师小编带您去了解一下快速将珊瑚虫IP数据库转MS SQL2005的图文教程,生活就是不断的发现新事物,get新技能~

【 tulaoshi.com - 编程语言 】

首先需要准备:
最新的珊瑚虫IP数据库 http://update.cz88.net/soft/qqwry.rar
Microsoft Office Access 2003
EiditPlus
MS SQL2005


1.然后打开珊瑚虫IP数据库自带的 ShowIP.exe,选择解压,另存一个TXT文件:


2.用EiditPlus打开这个文本拖动到最后几行,删除多余的东西(千万别试图用默认的文本编辑器打开,内存小的话你会死的很惨):


3.打开Access(为什么不直接到SQL里面导入数据呢?因为会出现文本格式错误,所以先曲线救国吧):


4.选择刚才解压出来的文本文件:


5.按下面操作,不做提示的直接下一步:






7.打开MS SQL2005,新建一个数据库,名字自己定,以下代码都使用[BasName]代替你新建数据库名称。

8.继续如下操作:




完成执行下面的存储过程:

代码如下:

-- 建立IP转换到十进制方法 
USE [BasName] 
GO 
/****** 对象:  UserDefinedFunction [dbo].[X16ToDe]    脚本日期: 09/19/2007 13:56:15 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

-- ============================================= 
-- Author:        Author,,Name 
-- Create date: Create Date, , 
-- Description:    转换IP为十进制 
-- ============================================= 
Create FUNCTION [dbo].[X16ToDe] 

    @Old_IP nvarchar(15) 

RETURNS numeric 
AS 
BEGIN 
    DECLARE 
        @CharIndex INT, 
        @CurrPoint INT, 
        @SingleValue NVARCHAR(5), 
        @Cache numeric 

    SET @CharIndex = 1 
    SET @CurrPoint = CHARINDEX('.',@Old_IP,@CharIndex) 
    SET @SingleValue = SUBSTRING(@Old_IP,@CharIndex,@CurrPoint - @CharIndex) 
    SET @Cache = cast(@SingleValue as numeric)*16777216 

    SET @CharIndex = @CurrPoint + 1 
    SET @CurrPoint = CHARINDEX('.',@Old_IP,@CharIndex) 
    SET @SingleValue = SUBSTRING(@Old_IP,@CharIndex,@CurrPoint - @CharIndex) 
    SET @Cache = @Cache + cast(@SingleValue as numeric)*65536 

    SET @CharIndex = @CurrPoint + 1 
    SET @CurrPoint = CHARINDEX('.',@Old_IP,@CharIndex) 
    SET @SingleValue = SUBSTRING(@Old_IP,@CharIndex,@CurrPoint - @CharIndex) 
    SET @Cache = @Cache + cast(@SingleValue as numeric)*256 

    SET @CharIndex = @CurrPoint + 1 
    SET @SingleValue = SUBSTRING(@Old_IP,@CharIndex,len(@Old_IP)- @CharIndex + 1) 
    SET @Cache = @Cache + cast(@SingleValue as numeric) 

    RETURN @Cache; 
END 

代码如下:

-- 建立十进制新表 
USE [BasName] 
GO 
/****** 对象:  Table [dbo].[IP_Real]    脚本日期: 09/19/2007 14:01:31 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
Create TABLE [dbo].[IP_Real]( 
    [startip] [numeric](18, 0) NULL, 
    [endip] [numeric](18, 0) NULL, 
    [country] [nvarchar](50) NULL, 
    [local] [nvarchar](200) NULL 
) ON [PRIMARY] 



这一步你可以自己按照你的情况来做,我是为了加快数据库索引的速度,所以将IP全部转换为十进制,存到一个新表里面。

-- 格式化省份
代码如下:

Update [BasName].[dbo].[IP] 
   SET [country] = replace([country],N'省',N'省 ') 

-- 删除CZ88.NET
代码如下:

Update [BasName].[dbo].[IP] 
   SET [country] = replace([country],N'CZ88.NET',N'') 

-- 将地区提出
Update [BasName].[dbo].[IP]
   SET [local] = SUBSTRING([country],CHARINDEX(' ',[country],1)+1,len([country]))

-- 存为国家或省份
Update [BasName].[dbo].[IP]
   SET [country] = SUBSTRING([country],0,CHARINDEX(' ',[country],1))

-- 去处前后导空格
Update [BasName].[dbo].[IP]
   SET [country] = Rtrim(Ltrim([country]))
      ,[local] = Rtrim(Ltrim([local]))

-- 转换IP为十进制,并写入新表
Insert INTO [BasName].[dbo].[IP_Real]
           ([startip]
           ,[endip]
           ,[country]
           ,[local])
Select dbo.X16ToDe([startip])
      ,dbo.X16ToDe([endip])
      ,[country]
      ,[local]
  FROM [BasName].[dbo].[IP]
order by [startip] ASC



最后测试一下看看:

 程序代码

-- 测试
DECLARE @IPNumber numeric
set @IPNumber = dbo.X16ToDe('219.140.31.91')

Select [startip]
      ,[endip]
      ,[country]
      ,[local]
  FROM [BasName].[dbo].[IP_Real]
Where [startip] = @IPNumber and [endip] = @IPNumber



基本所有的转换最多3分钟完成,比自己写应用程序转换要快的多。

来源:http://www.tulaoshi.com/n/20160219/1596816.html

延伸阅读
引言 随着对企业级高性能数据库的要求日益提高,用户有时会从 Microsoft® Access Jet 引擎文件服务器环境,转向 Microsoft SQL Server® 客户/服务器环境。Microsoft Office 2000 提供的 Access 2000 升迁向导,能够完成将 Access 表和查询移入 SQL Server 7.0 的工作。如果您使用的是 Access 的早期版本,则可以先升级到 Acce...
无法为此请求检索数据。(Microsoft.SqlServer.SmoEnum)其他信息执行Transact-Sql语句或批处理时发生了异常。(Microsoft.SqlServer.ConnectionInfo)尝试打开或创建物理文件“d:\Data\***.mdf”时,Create file遇到操作系统错误5(拒绝访问。) 数据库版本:SQL Server 2005企业版 操作系统版本:Windows Server 2003企业版 错误引发描...
事故起因: 之前使用SQL Server2008+VS2010开发,安装VS2012后数据库忽然无法连接 发现SQL Server配置管理器显示 远程过程调试失败 原因&对策: VS2012中自带的Local DB和Server2008冲突 在添加和删除程序中删除 "Microsoft SQL Server 2012Local DB" 后问题应该解决 祸不单行: 远程过程调试失败后出现了...
概述 “数据库镜像”是一种针对数据库高可用性的基于软件的解决方案。其维护着一个数据库的两个相同的副本,这两个副本分别放置在不同的SQL Server数据库实例中。建议使用不同位置的两台服务器来承载。在同一时刻,其中一台上的数据库用于客户端访问,充当“主体服务器”角色;而另一台则根据镜像会话的配置和状态,充当热备份服务器,即“镜...
标签: SQLServer
  Linux作为一个免费的Unix类操作系统,以其开放性源代码、多任务、Xwindow等特点为众多的用户所采用,并有很多企业采用Linux来作为其内部网的全功能服务器(WWW,FTP,Email、DNS)。企业的内部网不仅要提供文本信息的访问,还要能提供对企业关系数据库中的信息的访问。SQL Server以其低成本、性能高以及与NT的有效集成等特性为许多企...

经验教程

656

收藏

17
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部