我有4个查询条件,可以根据这4个条件的任意组合而进行查询,我写了存储过程如下
CREATE PROCEDURE ado_reverseinq 
@ao char(10),
@po char(10),
@so char(10),
@movment char(10) AS
select batchno from adobatch where aono=@ao or pono=@po or sono=@so or movment=@movment
但这明显不能达到我所要的要求,请问怎么写这个才好啊?

解决方案 »

  1.   

    你的要求是什么啊,如果是指任意组合的话,可以这样:
       CREATE PROCEDURE ado_reverseinq 
    @ao char(10),
    @po char(10),
    @so char(10),
    @movment char(10),
    @build char(2) (*组合字,根椐其值判断采用什么组合,如为1就只查询@AO,为2则查询@ao和@PO的组合......*)
     AS
    if @build=1
       select batchno from adobatch where aono=@ao 
    if @build=2
       select batchno from adobatch where aono=@ao or po=@po
    if @build=3
       select batchno from adobatch where aono=@ao and po=@po
      ......
    感觉不是好办法......呵呵
     
      

  2.   

    把where 之后做为一参数,然后用sp_executesql
      

  3.   

    这样试试看
    CREATE PROCEDURE ado_reverseinq 
    @ao char(10),
    @po char(10),
    @so char(10),
    @movment char(10) AS
    select batchno from adobatch where 
    (aono=@ao and len(@ao)>0) or 
    (pono=@po and len(@po)>0) or 
    (sono=@so and len(@so)>0) or
    (movment=@movment and len(@movment)>0)
      

  4.   

    你的要求是什么? 我看大家都不明白你要做什么?
    也不明白你现在的过程不能工作!按我的理解,你是希望通过这个过程来返回一个表,然后可以在select语句中用?如果是那样,存储过程完不成这样的事。不过如果你用sql Server, 你可以试一下:UDF---User Define Function ,他是可以返回一个表的。。在我的程序中就有这样的:
      select * from CheckBom("C");
      

  5.   

    我是用sqlserver2000,我现在想完成的事情如下:
    我现在有4个条件,分别为a,b,c,d  ,我想可以按着a,b,c,d 4个条件中的任意一个条件来查询,也可以按着a,b,c,d 4个条件中的任意几个组合成一个查询条件进行查询,比如同时满足条件a和B,或b,c,d 等等,请问怎么做?
      

  6.   

    把条件组合起来是用or来连接吗??
    如果是要同时满足两个条件,应该是用and来连接几个查询条件把
    要不你这样试试看
    CREATE PROCEDURE ado_reverseinq 
    @ao char(10),
    @po char(10),
    @so char(10),
    @movment char(10) AS
    select batchno from adobatch where 
    (aono=@ao or len(@ao)=0) and 
    (pono=@po or len(@po)=0) and 
    (sono=@so or len(@so)=0) and
    (movment=@movment or len(@movment)=0)不过这个问题只给20分少了点
      

  7.   

    我做过类似的语句不过不是用存储过程做的是在DELPHI里做的 很麻烦 但主要就是把几个有可能组合的情况写出来开始条件多,一个一个的判断下去条件就越来越少了
      

  8.   

    niat97222(Freeman) ( )能不能给个例子看看,谢谢
      

  9.   

    好了,我解决了 niat97222(Freeman) 我想给你结贴,但TMD管理里面怎么我给不了分啊,我CAO,不是我不讲信用,是真的给不了分,谁能告诉我