子表 记录超过一条,就报错 ,帮忙修改一下触发器

zhengyingcan 2018-10-29 09:33:07
触发器的代码如下
create TRIGGER [dbo].[add_MOCTG]
ON [dbo].[MOCTG]
FOR INSERT
AS
DECLARE @UDF06 VARCHAR(50) --仓库代码 有可能不填
DECLARE @TG001 VARCHAR(50) --工单单别
DECLARE @TG002 VARCHAR(50) --工单单号

SET @UDF06=''

--MOCTG增加了一条数据,获取主表MOCTF表的内容,并且获取主表仓库的内容
BEGIN
--先取出单身工单单别与单号
select @TG001=TG001,@TG002=TG002
FROM inserted
--获取主表的自定义字段内容
SELECT @UDF06=UDF06 FROM MOCTF WHERE TF001=@TG001 AND TF002=@TG002
--如何主表自定义仓库内容大于0,则修改子表的仓库字段
IF LEN(@UDF06)>0
UPDATE MOCTG SET TG010=@UDF06 WHERE TG001=@TG001 AND TG002=@TG002
END

当 子表 MOCTG 只有一条记录的时候,保存不会出错,但是当MOCTG超过一条记录的时候,比如3条记录,就报
affected more then 1 record 错误,翻译成 中文的意思 就是 影响超过1记录。 大神帮忙看一下这个触发器如何改,谢谢。
...全文
172 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_37958102 2018-12-12
  • 打赏
  • 举报
回复
加上序号(TG003)呢
Dear SQL(燊) 2018-12-11
  • 打赏
  • 举报
回复

create TRIGGER [dbo].[add_MOCTG] 
ON [dbo].[MOCTG]
FOR INSERT
AS
--MOCTG增加了一条数据,获取主表MOCTF表的内容,并且获取主表仓库的内容
BEGIN      
   update a set TG010=c.UDF06
   from MOCTG a
   inner join inserted b on a.TG001=b.TG001 and a.TG002=b.TG002
   inner join MOCTF c on a.TG001=c.TF001 and a.TG002=TF002
   where len(UDF06)>0
 
END
  • 打赏
  • 举报
回复
看你的语句 不用一行行处理的应该
zhengyingcan 2018-10-30
  • 打赏
  • 举报
回复
目的是可以 多行一起修改,用 UPDATE MOCTG SET TG010=@UDF06 WHERE TG001=@TG001 AND TG002=@TG002 也应该是可以的吧,怎么会出错呢
zhengyingcan 2018-10-30
  • 打赏
  • 举报
回复
谢谢版主,我晚上试试
zhengyingcan 2018-10-30
  • 打赏
  • 举报
回复
引用 4 楼 ayalicer 的回复:
看你的语句 不用一行行处理的应该

是的,不用一行一行的处理,所有子表内容一起处理,当子表只有一条记录的时候,就不会出错,当超过一条记录的时候,就出错。
吉普赛的歌 版主 2018-10-29
  • 打赏
  • 举报
回复
你没有理解 inserted 。 这个虚拟表是一个行集合, 可能有一行到多行。 你首先要做的是思考: 如果有多行, 在业务上如何处理? 这个没人能帮你, 你想好了, 再来做是非常简单的。 遍历 inserted 可以用临时表加行号来很方便地实现:
SELECT * INTO #tmp FROM INSERTED 
ALTER TABLE #tmp ADD rid INT IDENTITY(1,1)

DECLARE @i INT,@imax INT
SELECT @i=1,@imax=MAX(rid) FROM #tmp;

WHILE @i<=@imax
BEGIN
	SELECT * FROM #tmp WHERE rid=@i;
	--todo
	
	SET @i=@i+1
END

DROP TABLE #tmp;

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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