Create table tb_adree(Fadree Varchar(50))
然后将Fadree设为主键

解决方案 »

  1.   

    IP地址使用bingint或者decimal存储,这样检索和处理的效率很高.
      

  2.   

    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_IP2Int]') and xtype in (N'FN', N'IF', N'TF'))
    drop function [dbo].[f_IP2Int]
    GO/*--字符型 IP 地址转换成数字 IP

    --邹建 2004.08(引用请保留此信息)--*//*--调用示例 select dbo.f_IP2Int('192.168.0.11')
    select dbo.f_IP2Int('12.168.0.1')
    --*/
    CREATE FUNCTION f_IP2Int(
    @ip char(15)
    )RETURNS bigint
    AS
    BEGIN
    DECLARE @re bigint
    SET @re=0
    SELECT @re=@re+LEFT(@ip,CHARINDEX('.',@ip+'.')-1)*ID
    ,@ip=STUFF(@ip,1,CHARINDEX('.',@ip+'.'),'')
    FROM(
    SELECT ID=CAST(16777216 as bigint)
    UNION ALL SELECT 65536
    UNION ALL SELECT 256
    UNION ALL SELECT 1)A
    RETURN(@re)
    END
    GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_Int2IP]') and xtype in (N'FN', N'IF', N'TF'))
    drop function [dbo].[f_Int2IP]
    GO/*--数字 IP 转换成格式化 IP 地址--邹建 2004.08(引用请保留此信息)--*//*--调用示例 select dbo.f_Int2IP(3232235531)
    select dbo.f_Int2IP(212336641)
    --*/
    CREATE FUNCTION f_Int2IP(
    @IP bigint
    )RETURNS varchar(15)
    AS
    BEGIN
    DECLARE @re varchar(15)
    SET @re=''
    SELECT @re=@re+'.'+CAST(@IP/ID as varchar)
    ,@IP=@IP%ID
    from(
    SELECT ID=CAST(16777216 as bigint)
    UNION ALL SELECT 65536
    UNION ALL SELECT 256
    UNION ALL SELECT 1)a
    RETURN(STUFF(@re,1,1,''))
    END
      

  3.   

    上面是IP地址的字符形式与数据形式之间的相互转换函数.IP地址被保存前应该转换为数字,仅在显示时转换为字符,处理时应该统一用数字处理.
      

  4.   

    大家说的都很好,尤其是zjcxc,谢谢:)
    受益匪浅,
    多多讨论,
    分不够,
    再加.