关于ERP触发器,请大侠帮忙!~~~

ericliang101 2016-06-03 10:48:32
请帮忙看看以下我改写的触发器

CREATE TRIGGER [dbo].[INVTB_UPD] ON [dbo].[INVTB]
FOR UPDATE
AS
set nocount on

DECLARE
@TB004 CHAR(20),
@TB012 CHAR(10),
@UDF06 VARCHAR(255)

IF UPDATE(TA006)
SELECT @TB004=TB004,@TB012=TB012,@UDF06=UDF06
FROM INSERTED

IF @UDF06>''
BEGIN
UPDATE INVMC SET INVMC.MC003=@UDF06 WHERE
MC001=@TB004 AND MC002=@TB012
END


以上的“IF UPDATE(TA006)”是INVTA里的,而不是INVTB里;那应该怎么样写呢?那个是审核码,INVTB里没有,只有INVTA里才有这个。
...全文
182 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ericliang101 2016-06-04
  • 打赏
  • 举报
回复
引用 6 楼 roy_88 的回复:
[quote=引用 5 楼 ericliang101 的回复:] INVTA、INVTB是在同一个单据里表的,一个是单头,一个是单身。我想要的是,当我把这个单审核时(就是单头的TA006),单身里的UDF06数据回自动写到INVMC里的MC003里。
那你需要在INVTA建触发器,当更新TA006时,把TNVTB.UDF06更新在INVMC.MC003? 是这样意思吧[/quote] 版主大人,你帮帮我,写一个给我吧!
中国风 2016-06-04
  • 打赏
  • 举报
回复
参照以下方法,表头/表体关联列按实际情况改
CREATE TRIGGER tr_uINVTA ON INVTA
FOR UPDATE
AS
BEGIN
IF UPDATE(TA006)

	UPDATE b SET MC003=a.UDF06 FROM TNVTB AS a INNER JOIN INVMC AS b ON b.TA006=a.TA006 INNER JOIN inserted i ON i.ID=a.INVTA_ID--INVTA.ID(唯一列)=TNVTB.INVTA_ID为例


END
中国风 2016-06-03
  • 打赏
  • 举报
回复
引用 3 楼 ericliang101 的回复:
但是“TA006”是下属“INVTA”那个表里的,这样没问题吗?
不明白你要的效果,当自己表达不清时,最好模拟一下你的环境,贴表结构模拟数据,贴你要的效果
ericliang101 2016-06-03
  • 打赏
  • 举报
回复
但是“TA006”是下属“INVTA”那个表里的,这样没问题吗?
中国风 2016-06-03
  • 打赏
  • 举报
回复
猜一个
更新INVTA表的TA006列
CREATE TRIGGER [dbo].[INVTB_UPD] ON [dbo].[INVTB] 
FOR UPDATE
AS
set nocount on

DECLARE
@TB004 CHAR(20),
@TB012 CHAR(10),
@UDF06 VARCHAR(255),
@TA006 VARCHAR(255),


IF UPDATE(TA006)
SELECT @TB004=TB004,@TB012=TB012,@UDF06=UDF06,@TA006=TA006
FROM INSERTED

IF @UDF06>''
BEGIN
UPDATE INVMC
SET INVMC.MC003=@UDF06
WHERE
MC001=@TB004 AND MC002=@TB012
END
IF @TA006>''
BEGIN

UPDATE INVTA
SET TA006=@TA006
WHERE MC001=@TB004 AND MC002=@TB012 --条件以INVMC表为例
END
中国风 2016-06-03
  • 打赏
  • 举报
回复
TA006是列值还是栏位? TA006为列在INVTA表,那应该在这个表建触发器 如果是列值在INVTA表存在同栏位值数据,可以触发器里判断
ericliang101 2016-06-03
  • 打赏
  • 举报
回复
对对对,那咋写呢?大侠!
中国风 2016-06-03
  • 打赏
  • 举报
回复
引用 5 楼 ericliang101 的回复:
INVTA、INVTB是在同一个单据里表的,一个是单头,一个是单身。我想要的是,当我把这个单审核时(就是单头的TA006),单身里的UDF06数据回自动写到INVMC里的MC003里。
那你需要在INVTA建触发器,当更新TA006时,把TNVTB.UDF06更新在INVMC.MC003? 是这样意思吧
ericliang101 2016-06-03
  • 打赏
  • 举报
回复
INVTA、INVTB是在同一个单据里表的,一个是单头,一个是单身。我想要的是,当我把这个单审核时(就是单头的TA006),单身里的UDF06数据回自动写到INVMC里的MC003里。

22,206

社区成员

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

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