触发器多行数据不能及时刷新问题

明天是明天 2017-07-11 12:03:21
一个触发器 更新 多行数据,但是有个问题除第一行外,其他行需要保存两次才能更新数据,谢谢

declare
@fid int, --------------声明变量获取当前单据内码
@FEntryID int, --分录行
@ftrantype int,
@FQty_Base int,
@FQty int,
@FDecimal dec(20,10),
@FCoefficient dec(20,10)

begin
select @fid=fid,@FQty_Base=FQty_Base,@FQty=FQty,@FDecimal=FDecimal,@FEntryID=FEntryID from inserted -----------获取内码存入@finterid
select @FCoefficient=FCoefficient from t_MeasureUnit
if @FQty_Base>@FQty begin update t_BOStbsqEntry set FDecimal1=@FDecimal where t_BOStbsqEntry.FEntryID=@FEntryID end
else if @FQty_Base=@FQty begin update t_BOStbsqEntry set FDecimal1=@FDecimal/@FCoefficient from
t_BOStbsqEntry a left join t_ICItemCore b on a.FBase2=b.FItemID
left join t_ICItemBase c on b.FItemID = c.FItemID
left join t_MeasureUnit d on c.FSaleUnitID=d.FMeasureUnitID
where a.FEntryID=@FEntryID end
end
-------------修改范围为:
END
...全文
233 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
OwenZeng_DBA 2017-07-11
  • 打赏
  • 举报
回复
引用 楼主 qxhuo28 的回复:
一个触发器 更新 多行数据,但是有个问题除第一行外,其他行需要保存两次才能更新数据,谢谢
declare
@fid int,  --------------声明变量获取当前单据内码
@FEntryID int,  --分录行
@ftrantype int,
@FQty_Base int,
@FQty int,
@FDecimal dec(20,10),
@FCoefficient dec(20,10)

begin
	select @fid=fid,@FQty_Base=FQty_Base,@FQty=FQty,@FDecimal=FDecimal,@FEntryID=FEntryID from inserted -----------获取内码存入@finterid
	select @FCoefficient=FCoefficient from t_MeasureUnit
	if @FQty_Base>@FQty begin update t_BOStbsqEntry set FDecimal1=@FDecimal where t_BOStbsqEntry.FEntryID=@FEntryID end
	else if	@FQty_Base=@FQty begin update t_BOStbsqEntry set FDecimal1=@FDecimal/@FCoefficient from 
	t_BOStbsqEntry a left join t_ICItemCore b on a.FBase2=b.FItemID
	left join t_ICItemBase c  on b.FItemID = c.FItemID
	left join t_MeasureUnit d on c.FSaleUnitID=d.FMeasureUnitID
	where a.FEntryID=@FEntryID end
end
	  -------------修改范围为:
END
这个是个什么触发器,你的定义没有贴完整。我觉得问题出在你的逻辑。出问题的是,@FQty_Base > @FQty 还是 @FQty_Base = @FQty 的场景
baidu_35289351 2017-07-11
  • 打赏
  • 举报
回复
把更新语句,改为查询语句,看看,查询结果是不是包含需要的全部数据
明天是明天 2017-07-11
  • 打赏
  • 举报
回复
ALTER TRIGGER [dbo].[t_BOStbsqEntry_ins]
   ON  [dbo].[t_BOStbsqEntry]
   AFTER INSERT,UPDATE
AS 
BEGIN
	SET NOCOUNT ON;
declare
@fid int,  --------------声明变量获取当前单据内码
@FEntryID int,  --分录行
@ftrantype int,
@FQty_Base int,
@FQty int,
@FDecimal dec(20,10),
@FCoefficient dec(20,10)

begin
	select @fid=fid,@FQty_Base=FQty_Base,@FQty=FQty,@FDecimal=FDecimal,@FEntryID=FEntryID from inserted -----------获取内码存入@finterid
	select @FCoefficient=FCoefficient from t_MeasureUnit
	print @FDecimal
	print @FQty
	print @FQty_Base
	print @FCoefficient
	if @FQty_Base>@FQty begin update t_BOStbsqEntry set FDecimal1=@FDecimal where t_BOStbsqEntry.FEntryID=@FEntryID end
	
	else if	@FQty_Base=@FQty begin update t_BOStbsqEntry set FDecimal1=@FDecimal/@FCoefficient from 
	t_BOStbsqEntry a left join t_ICItemCore b on a.FBase2=b.FItemID
	left join t_ICItemBase c  on b.FItemID = c.FItemID
	left join t_MeasureUnit d on c.FSaleUnitID=d.FMeasureUnitID
	where a.FEntryID=@FEntryID end
	else begin update t_BOStbsqEntry set FDecimal1=0 end
end
	  -------------修改范围为:
END
sd4424 2017-07-11
  • 打赏
  • 举报
回复
查查看是不是标识列的问题
二月十六 2017-07-11
  • 打赏
  • 举报
回复
这个和具体执行时候的数据有关系,建议楼主打印一下判断条件的参数和其他参数,来判断触发器的代码执行顺序

22,210

社区成员

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

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