快速将珊瑚虫IP数据库转MS SQL2005的图文教程
更新时间:2008年08月02日 01:52:46 作者:
在幻想曲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分钟完成,比自己写应用程序转换要快的多。
相关文章
SQL 2005 ERROR:3145 解决办法(备份集中的数据库备份与现有的数据库不同)
在图形界面中,选择备份文件,设置覆盖原有数据库,指定现数据库文件所在的位置,选择错误回滚,点击确定2013-01-01
PowerDesigner中如何导入SQL Server数据库
这篇文章向我们介绍了如何导入SQL Server数据库到PowerDesigner中的详细步骤说明,并附带图片介绍,需要了解的朋友可以参考下2015-07-07
SQL2005Express中导入ACCESS数据库的两种方法
这篇文章主要介绍了SQL2005Express中导入ACCESS数据库的方法,需要的朋友可以参考下2014-09-09
Sql Server 2005中查询用分隔符分割的内容中是否包含其中一个内容
Sql Server 2005中查询用分隔符分割的内容中是否包含其中一个内容,多个朋友给予的参考。2011-10-10
在WIN7下安装和配置SQL Server 2005 Express Edition(精简版)
这篇文章主要介绍了在WIN7下安装和配置SQL Server 2005 Express Edition(精简版),需要的朋友可以参考下2015-01-01


最新评论