当前位置: 首页 > 图文教程 > 数据库 > MSSQL > 快速将珊瑚虫IP数据库转MS SQL2005的图文教程

MSSQL
SQL Server TEXT、NTEXT字段拆分的问题
SQL Server事务日志的几个常用操作
SQL Server不存在或拒绝访问故障的排除
动态创建MSSQL数据库表存储过程
教你如何在SQL Server计算列和平均值
如何应用SQL Server中的DBCC避免堵塞
SQLServer2000分布式事务错误解决方法
通用SQL数据库查询语句精华使用简介
利用typeperf工具收集SQL Server性能数据
SQL 2008 FileStream数据类型
自定义用于ASP Web站点的 SQL 7.0 数据库
SQL server 2005安装问题大全
利用"SQL"语句自动生成序号的两种方式
SQL Server数据库管理员必备的DBCC命令
讲解在SQL Server 2005中实现异步触发器架构
SQL Server 2008的新特性概述:集成服务
SQL Server 2008关系数据库引擎的新增功能
浅析SQL 2008的Change Data Capture功能
在IIS中为SQL Server 2008配置报表服务
SQL Server 2008中报表服务详解

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 151 ::
收藏到网摘: n/a

在幻想曲BLOG上看到不少朋友说,最近服务器上的IP数据好像不是很准确,于是重新做了一个新的,不少朋友可能需要这个数据库,因为文件太大的缘故,所以直接提供快速转换方法。 首先需要准备:
1.然后打开珊瑚虫IP数据库自带的 ShowIP.exe,选择解压,另存一个TXT文件:

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

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

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

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



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


完成执行下面的存储过程:
在幻想曲BLOG上看到不少朋友说,最近服务器上的IP数据好像不是很准确,于是重新做了一个新的,不少朋友可能需要这个数据库,因为文件太大的缘故,所以直接提供快速转换方法。
复制代码 代码如下:

-- 建立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分钟完成,比自己写应用程序转换要快的多。