技术开发 频道

纯真QQIP库导入到SQL Server实例详解

  步骤5

  这样就有了一个全新的QQIP.txt了,那么接下来就是导入到数据库中了,因为数据中有些是没有说明这一列的,所以使用SQL Server2000的【其它】中设置为“$”来分隔列,是没有办法做好的。所以这里我们先把整个行做了一列导入到数据中后再使用SQL进行字符串分隔。需要注意的是图5中设置字段长度为500,如果你没有设置导致报错,那么你就要先去数据库中删除这个表,之后再设置字段长度为500并导出,如果你没有删除表,那么会一直报错,因为已经有了这样一个表了,即使最后报错了。

1

  (图4:以一列作为导入)

1

  (图5:设置字段长度)

  步骤6

  现在已经有了一个叫做[QQIPbase]的表了,表的效果如图6所示。使用SELECT count(1) FROM [QQIPbase]发现记录数是378451条,和378448条不相等,再使用DELETE [QQIPbase] WHERE [列 0] =''删除空白行。请确认数据库的记录数是否是:378448条。再执行分析器上执行下面的脚步,这个脚本的作用就是把图6中[列 0]字段的字符进行分隔。

1

  (图6:刚导入后的效果图)

-- Author:      <听风吹雨>
-- Create date: <2010/05/27>
-- Description: <把字符串@str以@split分隔符进行分隔,返回第@index次匹配的元素>
-- =============================================
CREATE
FUNCTION [dbo].[Get_StrArrayStrOfIndex]
(
  @str VARCHAR(
5000),  --要分割的字符串
  @
split VARCHAR(10),  --分隔符号
  @index
INT --取第几个元素
)
RETURNS VARCHAR(
5000)
AS
BEGIN
  DECLARE @location
INT
  DECLARE @start
INT
  DECLARE @
next INT
  DECLARE @seed
INT
  
SET @str=LTRIM(RTRIM(@str))
  
SET @start=1
  
SET @next=1
  
SET @seed=LEN(@split)
  
  
SET @location=CHARINDEX(@split,@str)
  
WHILE @location<>0 and @index>@next
  BEGIN
    
SET @start=@location+@seed
    
SET @location=CHARINDEX(@split,@str,@start)
    
SET @next=@next+1
  
END
  
IF @location =0 SELECT @location =LEN(@str)+1
  RETURN SUBSTRING(@str,@start,@location
-@start)
END

 

  步骤7

  执行下面语句进行字符分隔

--使用函数Get_StrArrayStrOfIndex进行分隔
select AllInfo,
dbo.Get_StrArrayStrOfIndex(alls,
'$',1) as Start_IP,
dbo.Get_StrArrayStrOfIndex(alls,'$',2) as End_IP,
dbo.Get_StrArrayStrOfIndex(alls,'$',3) as Area,
dbo.Get_StrArrayStrOfIndex(alls,'$',4) as Remark
into QQIP
from [QQIPbase]

 

  步骤8

  进行设计表QQIP,对相应的字段设置大小,图7为最后的[QQIP]表效果图。

--字段说明
Start_IP nvarchar(
16) NULL,
End_IP nvarchar(
16) NULL,
Area nvarchar(
128) NULL,
Remark nvarchar(
512) NULL

1

  (图7:最后的[QQIP]表效果图)

  附:缺失数据记录分析

  像下面的数据中说明是没有内容的,所以在插入的时候就会出错,在2000中报错了,一条数据都没有导入,但是在2005其它数据可以导入,出去的就不能了,但是提示的功能也做的比较差,没有记录那些记录是没有导入的。(141490条数据报错)

  202.1.234.0$202.1.235.255$CZ88.NET

  202.1.236.0$202.1.236.255$香港$Yahoo公司

0
相关文章