sql 触发器或存储过程问题求助

来源:百度知道 编辑:UC知道 时间:2024/05/07 19:02:59
第一次接触触发器,不知道有什么作用,能不能做到如我有一张表a,
id 姓名 性别 出生日期 民族 学历
1 张三 男 1975-02-05 汉 大专
如果我通过程序修改了其中某个字段的值如学历:本科,能不能自动在下表中插入一行,并通过参数增加操作员**:
姓名 修改字段 修改前值 修改后值 修改时间 操作员
张三 学历 大专 本科 (系统时间) 李四
如果能做到,应该怎样写?怎样查询?
菜鸟见笑了。
能不能给写个触发器的例子,操作员可以采用加个字段 "最后修改人”方式

触发器是不能带参数的,能够判断哪些字段做了修改,和改前后的值
建议在第一张表中加个字段 "最后修改人"
然后用触发器捕捉更改前后的值,在分别判断每个字段是否做了修改,然后将值插入到新表中
或者将修改表的操作必须通过存储过程,在过程中向第一个表修改,向第二个表添加,这样避免使用触发器
我这里没有sql server 环境无法编写

create trigger tr_table on 表 for update,insert
as
begin
if update(列名)
insert into 表2 (id,修改字段,改前值,改后值,时间,操作员)
select id,'列名',i.列名,d.列名,getdate(),操作员 from inserted i,deleted d where i.id=d.id
end if
end

大概就是这个样子,好久没用sql server了语法不熟悉了,而且没有环境,只能大致写一个,参考一下
if update(列名) 判断某个列是否做了更新
inserted 修改前的值
deleted 修改后的值

好像是修改任何值,触发器都会发作,

但我感觉,修改前的值,你是拿不到的。

你生成的B表我个人感觉是没有用的,只需要在A表后加一个字段“操作人”即可,也可以再加一个修改时间, 正常情况下,默认为空,当修改时,把操作人的名字写上去就可。

你这种想法很不错,要是能实现就功能强大了。

实现了的话转给我一份哦,可以给两倍的分

可以做到

我想说的全让 gg152326 给说了!衰!!
最后,强烈建议在程序中直接用句子改或者调用存储过程,不要用触发器!
触发器执行代价昂贵,效率低下!