SQL触发器,如何修改一条数据的同时修改其他两个表的相同数据?

whisky1357 2013-08-17 09:59:13
我有3个表,A,B,C,里面都包含一个cname的数据,如何写触发器能够让我在改变表A的某个cname数据的时候同时也修改B,C表的相同数据?3个表里面的数据是不同的,只有cname是一样,求助!!!!
...全文
1656 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hgwyl 2013-08-17
  • 打赏
  • 举报
回复
按照现有表的话就是b,c表中where cname=变量cname 这种同步修改、删除的操作,3个表中最好做一下主键,不然数据多起来扫描全表够麻烦的。 A表的ID,主键、自增、+1 B、C表中的ID与A表相同
Andy__Huang 2013-08-17
  • 打赏
  • 举报
回复

create trigger tri_A
on A
after update
as
begin
update B set cname=A.name
from B
inner join inserted A on B.id=A.id

update C set cname=A.name
from C
inner join inserted A on C.id=A.id

end

--现在默认A表与B,C表是通过id关联的,如果是其他关键字关联,要自己修改关联
lzw_0736 2013-08-17
  • 打赏
  • 举报
回复

CREATE TRIGGER tr_a
   ON  a
   AFTER UPDATE
AS 
BEGIN
	SET NOCOUNT ON;

	UPDATE b SET cname=a1.cname_new
	FROM 
	(
		SELECT a.cname_new,b.cname_old
		FROM INSERTED a
		INNER JOIN DELETED b ON a.ID=b.ID
	) a1
	WHERE b.cname=a1.cname_old
	
	UPDATE c SET cname=a1.cname_new
	FROM 
	(
		SELECT a.cname_new,b.cname_old
		FROM INSERTED a
		INNER JOIN DELETED b ON a.ID=b.ID
	) a1
	WHERE b.cname=a1.cname_old
END
GO
Shawn 2013-08-17
  • 打赏
  • 举报
回复
--是这个意思?
CREATE TRIGGER tr_test ON tableA
AFTER UPDATE
AS
begin
	IF UPDATE(cname)
	begin
		UPDATE B
		SET B.cname = I.cname
		FROM tableB B
			INNER JOIN DELETED D
				ON B.cname = d.cname
			INNER JOIN INSERTED I
				ON D.rowid = I.rowid	--这个rowid是你A表的主键字段

		UPDATE c
		SET c.cname = I.cname
		FROM tableB c
			INNER JOIN DELETED D
				ON c.cname = d.cname
			INNER JOIN INSERTED I
				ON D.rowid = I.rowid	--这个rowid是你A表的主键字段
	end
end

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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