sybase的update触发器问题?

copyrightrr 2006-09-08 03:07:41
我现在要实现这样的一个功能:

要监控一个SYBASE数据表的修改,假定用户是通过PB开发的应用程序来对数据进行增加,删除和修改的,
如果发生数据变化的时候,将进行数据修改的用户名,机器名和IP地址,修改时间和增加,删除的数据保存到另外的一张数据表中,如果发生的是数据的修改,就要将旧数据和新数据都保存到数据表中.

我准备用在被监控的表上建立三个触发器来实现,有几个问题不明白?
1,当用户登陆到应用程序后,在数据库中就产生一个进程,通过这个进程号,就可以查询和这个用户相关的信息,如,用户名和IP地址等,直到这个用户退出程序,那么这个进程不会消失的.那么当用户对数据表进行改变的时候,触发器被去动,那么这个时候,在触发器执行中,是否又产生了一个进程,或者还是以前的一个进程.这个时候,如果我在触发器的代码中,通过全局变量(@@spid),这个值存储的是那一个进程ID号).

2.如果,我写一个UPDATE触发器,是想当数据有变化的时候,触发,我怎么才能取到变化前的数据和变化后的数据?
...全文
203 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
copyrightrr 2006-09-11
如果我的主键是一个组合主键,用户能够修改的字段也是其中的一个字段,那么,这样变化前后的值就不能通过主键关联起来,这样,就不能一一对应的将这两个值保存到表中.
是么?
回复
rightyeah 2006-09-11
对。
除了一种情况,就是你把主键的值也改了,那么就对应不起来了
回复
copyrightrr 2006-09-10
首先,inserted和deleted的表结构是和源表数据结构一样的,这个时候,这两个 表中的主键还是有值的,并且它的值就是变化前的源表的值。
我 这样理解对么?
回复
copyrightrr 2006-09-09
用户是在PB开发的程序中,在一个数据窗口中,对所有的记录数据进行修改的,那么可能同时对多条记录进行修改后,才提交到数据库,这时触发器才会执行,那么这时,在deleted,inserted表中,就有多条记录吗?分别就是修改的记录么?那么如果,我要将修改前和修改后的值怎样才能联系起来?
回复
rightyeah 2006-09-09
是,insert,delete,update操作涉及多个记录时,会产生多条记录的inserted或deleted记录,对于insert和delete操作,只需要处理一个临时表即可,对于update操作,一般要把inserted,deleted表通过主键连接起来处理
回复
rightyeah 2006-09-08
1,还是一个进程里面的。
2,update其实是被视作一句delete,一句insert,所以所有的修改操作都可以归结为deleted,inserted两个表,有删除无插入的,就是delete命令,有插入无删除的,就是insert命令,两个表都有的,就是update,所以楼主只要建一个触发器就可以了
回复
小潜s 2006-09-08
变化前的在deleted里,变化后的在inserted里
回复
相关推荐
发帖
脚本语言
创建于2007-09-28

732

社区成员

PowerBuilder 脚本语言
申请成为版主
帖子事件
创建了帖子
2006-09-08 03:07
社区公告
暂无公告