我自己写了一个存储过程,有两个变量,一个是起始时间@Start datetime,一个是截止时间@Finish datetime,返回一个数据集.
我想写一个程序,从这个返回的数据集里获取数据,但是程序里需要灵活设置查询条件对该数据集取值. 相当于SQL语句里再嵌套一个存储过程.
在网上搜了很久也没有找到处理的方法,请大家帮帮忙!

解决方案 »

  1.   

    那不是嵌套而动态SQL
    declare @SQL varchar(1024)if @A <> ''
     select @SQL = ' select * from Table where A = '+ @Aexecute (@SQL);大概就是这个意思。
      

  2.   

    按1的说法在条件变化多的时候,只能使用动态Sql了
      

  3.   

    用存储过程实现的话很麻烦,建议这样
    var
      v1,v2,v3,ASqlStr:string;//为你的查询条件的变量
      AStartTime,AEndTime :string;
    begin 
      ASqlStr :='select * from Table where Start='''+AStartTime+''' and Finish ='''+AEndTime+''';
      //给v1,v2等赋值
      //判断变量是否为空
      if V1<>'' then ASqlStr =ASqlStr +'and 表中字段='''+V1+'''';//格式如Finish ='''+AEndTime+'''
      //然后一直判断下去
      with adoquery1 do 
      begin 
        close;
        sql.clear;
        sql.add(asqlstr); 
        open; 
      end ;
    end;
      

  4.   

    这个问题应该是个动态sql 的问题,从窗口上EDit1 ,Edit2 输入起始时间与最后时间,然后sql 带两个参数就可以了.
      

  5.   

    我窗口上有起止日期两个为必填,也就可以作为参数,但另外有仓库,编号等项目不能必填,而且可能是多项,所以SQL条件也可能会用到in
      

  6.   

    用SQL可以做嵌套的.用动态SQL执行语言.
    在主函数中,定义一个输出函数.就能嵌套输出了.
      

  7.   

    在你的程序里面组织sql语句的where部分,传递到存储过程里面
      

  8.   


    我SQL语句的where部分像下面这个样子:
    WHERE (LA001 LIKE '2%')  AND (LTRIM(RTRIM(LA001))+LTRIM(RTRIM(LA016)) NOT IN (SELECT DISTINCT LTRIM(RTRIM(LA001))+LTRIM
          (RTRIM(LA016)) FROM YCSINVMX WHERE (LA001 LIKE '2%') AND (LA005='-1'))) AND
          (LA009 IN('C991','0014')) AND (LA001 <> '') AND (LA016 = '20090212')这段条件句中前两行是固定不变的,第3行条件是变化的,可能只有两个,也可能一个都没能,而且条件中的IN,<>,=也是变化的,就是不知道将这部分传递到存储过程里面去,试过很多次都不成功!
      

  9.   

    数据集存在一个表就行啦!!就是说存储过程的结果集INSERT到那个表,然后再怎样加条件都行了.有点牛角
      

  10.   


    我起初也是这样做的,但觉得不够优化,如果不加条件存储过程的结果集INSERT到那个表大约上百万的数据量,非常耗时,如果加上条件则小得多了,或者只有几万了
      

  11.   

    条件多的话写存储过程不好写,要判断的东西太多了,直接要客户端写SQL语句吧!
      

  12.   

    没有办法,本想将存储过程进行到底,看样子也只好拼SQL了!
      

  13.   

    select * from aaa where bb in(EXEC bb,v1,v2)
    在程序里做的话只能分2步来做!!