如何做ip排除检索?
向各位大哥问好. 
 我有个留言的表要出来,暂叫liuyan 
 里面有字段留言内容content,记录有留言ip, 
 另外有一个表,用来存放本市的iP段的,叫theips表吧 
 theips里面有两个表,表示ip段的开始和结束,s_ip和e_ip 
 但是一段一段的ip不是连续的 
 如10.0.0.1到10.10.10.10 
 下一个段就是30.30.30.30开始的了 
 现在我的问题就是 
 sql= "select   *   from   liuyan   where   ip   not   in   theips这个表里的 " 
 怎么写后面的呢 
 后者有别的联合查询也行 
 请大家多多指教 
 关键还要考虑效率问题 
 因为数据量大 
 留言的内容大概有15万条 
 不能每一个ip都拿到ip表比较吧 
 只说思路 
 具体的ip比较我自己解决 
 谢谢 
------解决方案--------------------
将ip地址字符串转换为数值再进行比较。 
 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   
 --1. 字符串IP地址转换成IP数值函数--邹建写的。 
 CREATE FUNCTION dbo.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   
 GO     
 select * from liuyan  
 where not exists  
   (select 1 from theips  
    where dbo.f_IP2Int(liuyan.ip) between dbo.f_IP2Int(s_ip) and dbo.f_IP2Int(e_ip))
------解决方案--------------------
你要是想效率高,我给你一个思路程序你自己写就好了   
 1:在你的留言表里弄一个数字字段就叫IP_KEY,可以考虑在上面建立一个索引,它的值是10*256*256*256+10*256*256+10*256+10,每次插入这个表的时候就自动将这个字段填写上,或者用一个触发器也可以。 
 2:将你的IP地址范围也增加两个字段,分别保存开始的IP_KEY和结束的IP_KEY   
 这样,就可以把查询转换为数字比较   
 SELECT * FROM TB_BBS A,TB_IP_ADDRESS B 
 WHERE A.IP_KEY > = B.IP_KEY_BEGIN 
   AND A.IP_KEY  <= B.IP_KEY_END 
   AND B.IP_NAME =  '北京 '