create procedure proName 
  (
     @id varchar(10),
     @name varchar(20),
     @time varchar(20)
  ) 
as
begin
  declare @ssql varchar(8000)  set @ssql='select ...'  if @id<>''
    begin
      set @ssql=@ssql+'and...'
    end
  if @name<>'' then
   ...end

解决方案 »

  1.   

    但是用存储过程调用时会报错
    pro: commandText Does Not Returen A result set 
    我用的是clentdataset 
    语法威:
     socket.open;
       cds.close;
       s:=Socket.appserver.sss('test',svalue);//test威过程名子
       cds.open;
       socket.close;
      

  2.   

    中间层威:
    function TTT_S006_TIB.TT_S006004(const Pname: WideString;  InFrames: OleVariant): OleVariant;
    var
      i,j:Integer;
    begin
        pro.ProcedureName := pname;
        Pro.Prepared :=true;
       pro.Parameters.Refresh;
       with pro do
          begin
             j := Parameters.Count;
             for i := 0 to j - 2 do
                parameters[i + 1].value := inFrames[i];
             //parameters[j - 3].value := '';
             execproc;
             //result := dsp.Data;
          end;
    end;
    客户层威:
    procedure TForm1.BitBtn1Click(Sender: TObject);
    var
      s,ss:String;
      svalue: Variant;
    begin
      svalue := VarArrayCreate([0, 50], varVariant);
       svalue[0] := '';
       svalue[1] := '';
       svalue[2] := 'stype';   socket.open;
       cds.close;
       s:=Socket.appserver.TT_S006004('Test;1',svalue);
       cds.open;
       socket.close;
    end;
    数据库为:
    CREATE   procedure    Test 
    @Mainid           varchar(20),
    @id                   varchar(30),
    @name            varchar (20)as 
    declare @sql varchar(3000)
          set @sql='select * from tt_sendMain where  SendMainid=200403231000001  '
    GO//////////////
    当直接写:'select * from tt_sendMain where  SendMainid=200403231000001  就没有事情
      

  3.   

    select  @sql='select * from tt_sendMain where  SendMainid=200403231000001  '
    就可以了
      

  4.   


        你的存储过程中少了一步重要的工作:    set @ssql=...
        之后,要加上:
        exec(@ssql)
      

  5.   

    create procedure proName 
      (
         @id varchar(10),
         @name varchar(20),
         @time varchar(20)
      ) 
    as
    begin
      declare @ssql varchar(8000)  set @ssql='select ... where 1=1 '  if @id<>''
        begin
          set @ssql=@ssql+'and...'
        end
      if @name<>'' then
        begin
          set @ssql=@ssql+'and...'
        end
      if @time<>'' then
        begin
          set @ssql=@ssql+'and...'
        end
      exec (@ssql) 
    end