sql触发器保持更新的哪一行数据(sql server中的触发器问题:当批量增删数据时,inserted和deleted中的数据会多于一行吗)

本文目录
- sql server中的触发器问题:当批量增删数据时,inserted和deleted中的数据会多于一行吗
- SQL server 如何使用触发器记录用户的更新操作的列的值
- SQL触发器,当表中有新行插入时,则立即更新该行的某列值
- 刚才那个sql触发器的,怎么知道表里哪一行是被update了的
- sql触发器为什么不更新最后一条纪录
- 在SQL表中有一个更新触发器,同时更多条记录时为何只有最后一条记录触发
- SQL触发器怎样更新数据
sql server中的触发器问题:当批量增删数据时,inserted和deleted中的数据会多于一行吗
你所谓的批量是什么意思?不也是一条条的来?一条条的删除或者修改,触发器的数据仍然是一行。
除非你用的是bluk方式。那样触发器会怎么还没试过。
SQL server 如何使用触发器记录用户的更新操作的列的值
在表上创建一个更新触发器
create trigger
on after update
as
begin
--你需要的操作写在这里
end
在更新触发器中,通过 deleted 获取更新前的值;通过 inserted 获取更新后的值。例如
-- 获取更新前的值
select * from deleted
-- 获取更新后的值
select * from inserted
SQL触发器,当表中有新行插入时,则立即更新该行的某列值
create or replace trigger tr_test before insert on test for each rowdeclarebegin :new.c:= :new:c+1;end ;
楼上的回答不正确,因为在插入之后(未提交)再次进行修改本行记录,会提示错误。如果非要在插入之后在修改的话,那么可以用自治事务来实现,但是我还是觉得在插入之前更新插入的值更好,不用插入、修改。
刚才那个sql触发器的,怎么知道表里哪一行是被update了的
Update Sales
Set 库存数量=i.库存数量
From Sales br , Deleted d ,Inserted i --Deleted和Inserted临时表
Where br.库存数量=d.库存数量
试试,不太确定
| 虚拟表Inserted | 虚拟表Deleted
在表记录新增时 | 存放新增的记录 | 不存储记录
修改时 | 存放用来更新的新记录 | 存放更新前的记录
删除时 | 不存储记录 | 存放被删除的记录
sql触发器为什么不更新最后一条纪录
简单的看了一下这个触发器
create TRIGGER tr_wtr1
ON owtr
for insert
就是当 owtr 表,有数据插入的时候,触发。 触发器的名字叫 tr_wtr1
触发的时候,干什么事情呢?
update
wtr1
set
volume = a.quantity*b.svolume
from
wtr1 a,
oitm b
where
a.itemcode=b.itemcode
看上去就是
更新 wtr1 表的 volume 字段。
条件是把 oitm 表 与 wtr1 表, itemcode 关联的数据。
首先这个触发器里面干的事情,和被触发的表,一点直接关系也没有。
因为是 当 插入 owtr 表的时候, 触发去更新 wtr1 表,条件要用到 oitm 表。
sql触发器为什么不更新最后一条纪录
不知道你是怎么触发的
插入了几条记录,
预期要触发几次?
比如你执行了一次
INSERT INTO owtr VALUES (......)
那么那个触发器会被触发执行一次。
你执行
INSERT INTO owtr
SELECT .. FROM ... WHERE ...
那么那个触发器会是被触发执行一次。(即时插入了多行数据,但是只触发一次)
你的不更新最后一条纪录,是指什么呢?
在SQL表中有一个更新触发器,同时更多条记录时为何只有最后一条记录触发
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
来判断,总共修改了多少条 记录, 然后根据需要 做循环处理。
SQL触发器怎样更新数据
--创建需触发的表
create table cfq(
a int,
b int
)
--创建触发器,监视该表
CREATE TRIGGER t_cfq ON dbo.cfq
for INSERT, UPDATE, DELETE
AS
begin
set nocount off
declare @a int
select @a=a from cfq
update cfq set b=@a where a=@a
end
--触动触发器
insert into cfq(a,b) select 2,null
insert into cfq(a,b) select 3,null
select * from cfq
所得结果
a b
2 2
3 3

更多文章:
jfreechart 极坐标设置线条颜色(各位,怎样修改 matlab 中极坐标生成的图像线条的宽度求程序指导! 谢谢了!!!)
2025年8月9日 12:00
appear后面可以加名词吗(高考英语备考之 appear的用法)
2025年9月17日 03:30
django框架安装过程(京东云擎怎么搭建django 框架)
2025年7月24日 02:00
index加match函数出错(excel中INDEX和MATCH函数出现的问题)
2026年1月3日 23:00
routes插件(模拟火车2019机车插件和线路插件安装在哪里怎么激活求大神解答!!)
2025年7月11日 16:45
手机java运行库下载(三星C3300K手机下载JAVA游戏详细方法)
2026年1月12日 09:00
雅马哈音响portable(为什么存储卡里的歌在可插卡蓝牙音响上有些能放,有些不能放)
2026年8月5日 16:15
易语言源码忘记保存奔溃怎么找回(易语言源码丢失,用什么恢复软件恢复后可以用)
2025年12月9日 05:45












