在SQL表中有一个更新触发器,同时更多条记录时为何只有最后一条记录触发

 我来答
wangzhiqing999
2010-08-29 · TA获得超过1.6万个赞
知道大有可为答主
回答量:7048
采纳率:100%
帮助的人:3336万
展开全部
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

来判断,总共修改了多少条 记录, 然后根据需要 做循环处理。
快乐编程教育
2010-08-29 · 专业IT知识分享,编程技巧分享
快乐编程教育
采纳数:342 获赞数:812

向TA提问 私信TA
展开全部
不会啊,只要触发肯定要执行触发器。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式