各位老大:现有一难题,想写一个存储过程,传递tablename,fieldname,condition后查询相应表相应字段在相应查询条件下的最大值,但参数传递时总出错,高人给个示例吧!

解决方案 »

  1.   

    try
        ADOStoredProc := TADOStoredProc.Create(nil);
        ADOStoredProc.Connection := ADOConnection;    ADOStoredProc.ProcedureName := '存储过程1';
        ADOStoredProc.Parameters.CreateParameter('tablename', ftString, pdInput, 20,传入值);
        ADOStoredProc.Parameters.CreateParameter('fieldname', ftString, pdInput, 20, 传入值);
        ADOStoredProc.Parameters.CreateParameter('condition', ftString, pdInput, 20, 传入值);    ADOStoredProc.Prepared := True;
        ADOStoredProc.ExecProc;
      finally
        ADOStoredProc.Free;
      end;
      

  2.   

    补充:目的是想在DELPHI中调用存储过程获得指定表指定字段的最大值。代码如下:set @maxvalue=(select max(ua) from datatable)
    select @strmax=(select cast(@maxvalue as varchar(20)))
    select @str='insert maxmintable values('+@strmax+','+'0'+')'
    exec (@str)
    如果是这样没有什么问题,但如果将datatable换成传递参数就不对了。比如如果卧要传递@tablename替换它,应如何处理呢?
      

  3.   

    to debugxp:我可能没有说清楚,现在是在sql的存储过程中总是过不去。望进一步指教!
      

  4.   

    create procedure sptest
    @tablename varchar(20),@fieldname varchar(20),@condition char(8000)
    as
     exec('select max('+@fieldname+') as maxval from '+@tablename+' '+@condition)
    go
    sptest 'orders','orderid','where customerid=''vinet'''
      

  5.   

    写成动态sql
    declare sqlstr varchar(4000)
    set sqlstr:='set @maxvalue==(select max(ua) from '+@tablename+')'
    其他的一样
      

  6.   

    tryexec SP_EXECUTESQL N'set @maxvalue=(select max(ua) from '+@tablename+')'
      

  7.   

    试了一下,exec('select max('+@fieldname+') as maxval from '+@tablename+' '+@condition)可以将值读出,不过在应如何在delphi中读出这个值呢?
      

  8.   

    各位:应如何将求得的最大值返回到delphi中呢?在线等待......
      

  9.   

    用一个Query open一下就可以了
      

  10.   

    返回的是记录集ADOStoredProc.FieldByName('maxval').asstring
      

  11.   

    能否用存储过程直接返回numeric(18,2)类型的数据呢?如果可以,请指教如何进行?