请教一个关于用户自定义函数update的问题

chhx0 2004-04-09 03:49:31
CREATE FUNCTION uf_ifjumpout (
@as_ssnno char(18),
@as_modeno char(10),
@ai_pass integer,
@as_repperno char(10))
RETURNS integer AS
BEGIN
declare @li_jumpout integer ,
@li_sqlerr 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语句无法通过,不知道如何处理
update pp_plan_mstr set plan_inqty = plan_inqty + 1 where plan_id = @adec_planid;
end
end return @li_sqlerr
END
...全文
45 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
chhx0 2004-04-09
  • 打赏
  • 举报
回复
谢谢各位指教
LoveSQL 2004-04-09
  • 打赏
  • 举报
回复
给你写个存储过程
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
newdongkui 2004-04-09
  • 打赏
  • 举报
回复
你的逻辑出问题了,呵呵.
你这些只更新plan_id = null的记录
你想做什么呢?
zjcxc 2004-04-09
  • 打赏
  • 举报
回复
未在下面的列表中列出的语句不能用在函数主体中。

赋值语句。


控制流语句。


DECLARE 语句,该语句定义函数局部的数据变量和游标。


SELECT 语句,该语句包含带有表达式的选择列表,其中的表达式将值赋予函数的局部变量。


游标操作,该操作引用在函数中声明、打开、关闭和释放的局部游标。只允许使用以 INTO 子句向局部变量赋值的 FETCH 语句;不允许使用将数据返回到客户端的 FETCH 语句。


INSERT、UPDATE 和 DELETE 语句,这些语句修改函数的局部 table 变量。


EXECUTE 语句调用扩展存储过程。


安全说明 验证所有用户输入。验证之前,不要串联用户输入。绝对不要执行根据尚未验证的用户输入构造的命令。有关更多信息,请参见验证用户输入。

zjcxc 2004-04-09
  • 打赏
  • 举报
回复
自定义函数中无法用update

改存储过程吧.

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧