告诉你,这样来很好!就是定义一个字段来保存数据:
type varchar(100)
保存数据为:|2|3| 表示是:贸易型和服务型
而在网页里用:
<input type="checkbox" name="jyms" value="1">生产型
<input type="checkbox" name="jyms" value="2">贸易型
<input type="checkbox" name="jyms" value="3">服务型
<input type="checkbox" name="jyms" value="4">政府或其他机构在接收端:
types=trim(Request.Form("jyms"))
type_id=""
if types<>"" then
types=replace(types," ","") dim arrtrade,itrade
arrtrade=split(types,",")
for itrade=0 to ubound(arrtrade)
type_id=type_id & "|" & arrtrade(itrade)
next
type_id=type_id & "|"
end if
在搜索的时候 SQL 里使用:
 CHARINDEX('|" & type & "|',type)>0
就可以搜索出来

解决方案 »

  1.   

    谢谢!!! 这种方法是可以的, 但是我的数据量很大, 百万级以上. 
    如果用Like 或 Charindex 试必会导至查询速度下降.where 语句表达式中左边用任何函数, 将会导至索引失效. 因此大数据表不适合用这种方法.
    CHARINDEX('|" & type & "|',type)>
      

  2.   

    create table 企业经营模式(企业代码 bigint references 企业(代码),
      模式 int references 经营模式字典(id))查询经营模式@c(并且假设它是字符)的企业:
    select * from 企业 as q where exists(select * from 企业经营模式 as m inner join
       经营模式字典 as d on m.模式=d.id where on m.企业代码=q.代码 and m.名称=@c)
      

  3.   

    2) 定义一个字段
       例如: type  char(4)   
             用四位字符表示不同的状态, 1000 表示是生产型; 1100 表示是生产和贸易型等这种方法不错,在往数据库写入和查询之前处理一下就可以了,
    一个字段表示一个类型的状态(选还是未选)
      

  4.   

    1.生产型; 3.贸易型; 5.服务型; 7.政府或其他机构
    查 1+3=4 : where Type in(4,9,11,16)
    查 3+5=8: where Type in(8,9,15,16)
    .............
      

  5.   

    “请问里面套了子查询, 会不会同样导至查询速度下降呢”
    ---------------------------------------------------------
    不会。因为,在数据比较多时,查询优化器的决策和“我的做法”相同。(呵呵,信不信由你!)如果变为inner join,那么机检索出来的“企业”数据有重复行,必须使用distinct,这样反而大大降低了速度。select * from 企业 as q where exists(select * from 企业经营模式 as m inner join
       经营模式字典 as d on m.模式=d.id where on m.企业代码=q.代码 and m.名称=@c)
      

  6.   

    原来那个查询中“m.”应为“d.”。不论用还不是用子查询,以下都是要点:对于“d.名称=@c”,不会使用索引进行优化,因为表中的记录数很少。对于“m.模式=d.id”也不会进行优化,因为模式很少,造成SQL Server会禁止使用“企业经营模式”表中在“模式”上建立的索引。对于“m.企业代码=q.代码”,将小表放在外层查询,内层利用“m.企业代码”的索引。
      

  7.   

    如果“增加一种经营模式”是程序应该提供给用户的一个功能,那么“where Type in(4,9,11,16)”的方法在设计上不可行。
      

  8.   

    我说明一下第二种采用type char(4)的方法也有问题, 保存和显示都不是问题, 问题是在单选查询时有问题? 例如: 我查询'1000'生产型
    但会把, '1100' 生产型/贸易型 过滤掉, 这个就是主要的问题.2) 定义一个字段
       例如: type  char(4)   
             用四位字符表示不同的状态, 1000 表示是生产型; 1100 表示是生产和贸易型等