请教一下大家关于触发器的问题,谢谢大家了~

ytc_lry 2010-12-12 06:01:44
用触发器怎么获取一个表中某个字段更新。
初学者。谢谢大家了。
或者说,我在一个成绩表里面有平时成绩,期中成绩,期末成绩。
我希望在某个记录被修改以后,可以自动将它修改的记录放到另外一个表储存下来。怎么写代码,谢谢大家了。
...全文
111 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
samyou 2010-12-13
  • 打赏
  • 举报
回复
会知道记录是否更新,但知道具体某个字段更新好象没多大意义哦
gdk123 2010-12-13
  • 打赏
  • 举报
回复
又学到东西了。
siegebaoniu 2010-12-13
  • 打赏
  • 举报
回复
----------------------插入触发器inserted(批量)--------------------
CREATE trigger FOR_insert on tb
for insert
as

begin
insert into ta(qwe,rty)
select 1+a,'a'+b
from inserted
end
daishaodong 2010-12-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dlut_liuq 的回复:]
SQL code
楼主可以使用带OUTPUT参数的UPDATE.
UPDATE tb
SET COL1='XXX'
OUTPUT INSERTED.COL1,INSERTED.COL2 INTO @TB
[/Quote]

sqlserver2000貌似没有这个参数吧
-晴天 2010-12-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ytc_lry 的回复:]
引用 3 楼 qianjin036a 的回复:
插入时,将inserted表中的记录直接插入到A.
删除时,将deleted表中的记录直接插入到A.

我大概懂了。你能写个例子不,我写的有点问题。这个插入怎么做,记录怎么获取啊。写个例子可以吗?
[/Quote]
create table tb(id int,col varchar(10))
create table tb1(id int,col varchar(10))
go
create trigger addtotb1
on tb
after insert
as
begin
insert into tb1 select * from inserted
end
go
insert into tb select 1,'ABC'
select * from tb1
go
drop table tb,tb1
/*
id col
----------- ----------
1 ABC

(1 行受影响)
*/
昵称被占用了 2010-12-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 josy 的回复:]
参考精华帖 触发器综述
[/Quote]
某个记录被修改其实是模糊的,比如以下语句
update test set
col1= col1
where ...
这里,实际col1的记录值没有修改,但是
inserted表是有记录的
update(col1)也是True的
所以严格来说,要判断记录值是否被修改,需要连接inserted和deleted来判断,如果col1可以为空,判断就会有点复杂,考虑的情况就较多
这是触发器容易有问题的原因之一
百年树人 2010-12-12
  • 打赏
  • 举报
回复
参考精华帖 触发器综述
ytc_lry 2010-12-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 qianjin036a 的回复:]
插入时,将inserted表中的记录直接插入到A.
删除时,将deleted表中的记录直接插入到A.
[/Quote]
我大概懂了。你能写个例子不,我写的有点问题。这个插入怎么做,记录怎么获取啊。写个例子可以吗?
-晴天 2010-12-12
  • 打赏
  • 举报
回复
在使用触发器时有两个特殊的表,表结构与所处理的表相同,是由系统自动产生的,系统在处理完数据后自动删除这两个表,它们是:
inserted,deleted
前者在插入或更新时产生,后面在删除或更新时产生.
插入时,没有后者,删除时,没有前者.
用 if not exists(select 1 from deleted)
及 if not exists(select 1 from inserted)
可判断对表的操作.
这样,你可以根据你想记录的操作,由这两个表获取记录,插入到你想记录它们的表(设为A)中去.
插入时,将inserted表中的记录直接插入到A.
删除时,将deleted表中的记录直接插入到A.
更新(update)时,对比inserted和deleted,前者是更新后的内容,后者是更新前的内容,将相应的内容存入A.
飘零一叶 2010-12-12
  • 打赏
  • 举报
回复
楼主可以使用带OUTPUT参数的UPDATE.
UPDATE tb
SET COL1='XXX'
OUTPUT INSERTED.COL1,INSERTED.COL2 INTO @TB
水族杰纶 2010-12-12
  • 打赏
  • 举报
回复
create trigger tri_name on tb
for update
as
insert ta select * from inserted --inserted是修改后的记录 deleted是修改前的记录

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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