有一表temp含有字段a,b,c,d,e同有30000多記錄。現要更新字段e的值,在字段c,d中取較小值-字段a,b中較大的值.將兩者之差賦給e.我寫了一個函數:
function acc(x,y,z,l):Double;
Var
  maxq,minq:Double;
begin
  if x<y then
    maxq:=y
  else
    maxq:=x;
   
   if z<l then
     minq:=z
   else
     minq:=l;
  result:=minq-maxq;
end;問題一:
我用下列方法時出現acc未定義的出錯提示
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Update temp set e=acc(a,b,c,d)');
ADOQuery1.ExecSQL;問題二:
我用下列方法時出現a,b,c,d未定義的出錯提示
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Update temp set e='+acc(a,b,c,d));
ADOQuery1.ExecSQL;
問題三:
我用下列方法時出現a,b,c,d未定義的出錯提示
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Update temp set e=:xy');
ADOQuery1.Parameters.ParamByName('xy').Value:=acc(a,b,c,d);
ADOQuery1.ExecSQL;現請問如何在SQL語句Update temp set e=中加入自己寫的函數?

解决方案 »

  1.   

    Update Temp set e=((case when c >= d then d when c < d then c end) - (case when a >= b then a when a < b then b end)) 函数Case的使用方法
    CASE
        WHEN 布尔型结果的表达式 THEN ..
            [ ...n ]
             ELSE ..
        END
    这是Case的一种方法,另外还有一种是
    Case 表达式
    When ... then 
    when ... then
    end
      

  2.   

    倒,你这种用法根本不行!
    sql是要送到服务器去解释执行的,而你的函数是客户端delphi的函数
    1 你可以在服务器上定义函数
    2 你可以直接写sql
    update table
    set e= min(c,d) - max(a,b)
      

  3.   

    在sql语句中只能加入数据库的函数
    楼主确实要加入自己函数,就在数据库中自定义函数
    sql server 2k中语法Create Function sample((@Data1 int,@Data2 int)
    RETURNS int
    AS
    BEGIN
      declare @total int
      set @total=@data1+@data2
      RETURN(@Total)
    ENDsample函数可以和其他标准函数一样调用