自定义函数中无法用update改存储过程吧.

解决方案 »

  1.   

    未在下面的列表中列出的语句不能用在函数主体中。 赋值语句。
    控制流语句。
    DECLARE 语句,该语句定义函数局部的数据变量和游标。
    SELECT 语句,该语句包含带有表达式的选择列表,其中的表达式将值赋予函数的局部变量。
    游标操作,该操作引用在函数中声明、打开、关闭和释放的局部游标。只允许使用以 INTO 子句向局部变量赋值的 FETCH 语句;不允许使用将数据返回到客户端的 FETCH 语句。
    INSERT、UPDATE 和 DELETE 语句,这些语句修改函数的局部 table 变量。
    EXECUTE 语句调用扩展存储过程。 
    安全说明  验证所有用户输入。验证之前,不要串联用户输入。绝对不要执行根据尚未验证的用户输入构造的命令。有关更多信息,请参见验证用户输入。
      

  2.   

    你的逻辑出问题了,呵呵.
    你这些只更新plan_id = null的记录
    你想做什么呢?
      

  3.   

    给你写个存储过程
    CREATE Procedure uf_ifjumpout (
     @as_ssnno char(18),
     @as_modeno char(10),
     @ai_pass integer, 
     @as_repperno char(10)  ,
     @li_sqlerr int  output)  
    AS  
    BEGIN 
          declare    @li_jumpout integer ,
                                   @li_ret          integer,
                       @adec_planid decimal(18),
                       @ls_procno char(10),
                       @ls_orderno char(18),
                       @ldt_todaytime datetime,
                       @ldt_jumpdate datetime       if @ai_pass = 0
              begin
                   select @adec_planid = (select max(plan_id) from pp_plan_mstr where plan_planqty > plan_inqty)
                   if isnull(@adec_planid, 0) = 0 
                       begin
                            update pp_plan_mstr set plan_inqty = plan_inqty + 1   where plan_id = @adec_planid;                   
                       end
               end       
    END