【发布时间】:2022-10-01 12:36:08
【问题描述】:
我在数据库中有两个表,它们具有一对多的关系(例如:表dbo树[tree_id, tree_code] 有很多dbo.Fruits[id,姓名,father_tree_id,father_tree_code])。
我试图创建一个触发器,当 dbo.Frutos 的列 codigo_arvore_pai 被更新或插入到其中时,dbo.Frutos 的列father_tree_code 被更新为与 dbo.Tree 表的 tree_id 对应的值。条件是 dbo.Tree 的 code_tree 等于 code_tree_father ofdbo.Fruits.
CREATE TRIGGER [dbo].[tr_updateFruit] on [dbo].[Fruits]
AFTER INSERT, UPDATE
AS
IF (UPDATE(father_tree_code))
BEGIN
UPDATE dbo.Fruits
SET id_arvore_pai = A.id_arvore
FROM dbo.Fruits as obj
INNER JOIN dbo.Tree A ON obj.father_tree_code = A.tree_code
WHERE obj.Id IN (SELECT DISTINCT obj.Id FROM dbo.Fruits)
END;
怎么了?
-
不使用
inserted或deleted伪表的触发器是可疑的。您的IN查询也没有意义,因为DISTINCT obj.Id指的是外部表。因此,您实际上是在询问表中的 id 是否存在于同一个表中。 -
那么如何进行这个更新过程呢?
-
Fruits 应该只保存father_tree_id,而不是father_tree_code。
标签: sql sql-server triggers