在SQL表中有一个更新触发器,同时更多条记录时为何只有最后一条记录触发
2个回答
展开全部
Oracle 触发器有2种
一种语句级别的
一种行级的 FOR EACH ROW
有 BEFORE 有 AFTER
取得 操作数据 的是通过 :old :new
BEFORE 的时候, 可以通过 :new.xxx 来修改数据。
对于 INSERT OR UPDATE OR DELETE 的
通过 INSERTING UPDATING DELETING 进行判断。
通过 OF 字段 ON 表 实现只针对特定列的触发。
-----------------------------------------------------
SQL Server
触发器只有 语句级别的
只有 AFTER
取得 操作数据,通过 inserted deleted
编写触发器的时候,要充分考虑 一次更新一条,与一次更新多条的问题。
避免简单的 SELECT @NewName = name FROM inserted; 代码操作。
对于 FOR INSERT,UPDATE,DELETE 的
通过 查询 inserted 与 deleted 的记录 来判断
通过COLUMNS_UPDATED 实现在触发以后,判断哪些列被更新了。
============================================================
我是这么怀疑的。
楼主可能是按照 Oracle 的 FOR EACH ROW 的思路,来写那个触发器的。
也就是,假如
UPDATE table_1 SET coulmn_1 = 10 WHERE column_2 = 5;
会更新3条记录。
那么这个 SQL 语句,在 Oracle 的 FOR EACH ROW 的触发中,会被触发3次。
但是在 SQL Server 中, 触发器是 语句级别的。
也就是说:
UPDATE table_1 SET coulmn_1 = 10 WHERE column_2 = 5;
会更新3条记录。
但是触发器,只执行了一次。
如果你简单的,就
SELECT ... FROM inserted
SELECT ... FROM deleted
的话,那么你最后检查的时候,就会以为 “只触发了一条数据”。
楼主 可以修改一下那个 存储过程。
首先 SELECT COUNT(1) FROM inserted
来判断,总共修改了多少条 记录, 然后根据需要 做循环处理。
一种语句级别的
一种行级的 FOR EACH ROW
有 BEFORE 有 AFTER
取得 操作数据 的是通过 :old :new
BEFORE 的时候, 可以通过 :new.xxx 来修改数据。
对于 INSERT OR UPDATE OR DELETE 的
通过 INSERTING UPDATING DELETING 进行判断。
通过 OF 字段 ON 表 实现只针对特定列的触发。
-----------------------------------------------------
SQL Server
触发器只有 语句级别的
只有 AFTER
取得 操作数据,通过 inserted deleted
编写触发器的时候,要充分考虑 一次更新一条,与一次更新多条的问题。
避免简单的 SELECT @NewName = name FROM inserted; 代码操作。
对于 FOR INSERT,UPDATE,DELETE 的
通过 查询 inserted 与 deleted 的记录 来判断
通过COLUMNS_UPDATED 实现在触发以后,判断哪些列被更新了。
============================================================
我是这么怀疑的。
楼主可能是按照 Oracle 的 FOR EACH ROW 的思路,来写那个触发器的。
也就是,假如
UPDATE table_1 SET coulmn_1 = 10 WHERE column_2 = 5;
会更新3条记录。
那么这个 SQL 语句,在 Oracle 的 FOR EACH ROW 的触发中,会被触发3次。
但是在 SQL Server 中, 触发器是 语句级别的。
也就是说:
UPDATE table_1 SET coulmn_1 = 10 WHERE column_2 = 5;
会更新3条记录。
但是触发器,只执行了一次。
如果你简单的,就
SELECT ... FROM inserted
SELECT ... FROM deleted
的话,那么你最后检查的时候,就会以为 “只触发了一条数据”。
楼主 可以修改一下那个 存储过程。
首先 SELECT COUNT(1) FROM inserted
来判断,总共修改了多少条 记录, 然后根据需要 做循环处理。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询