trigger应用

论坛上看到的一个帖子:

(谁有办法确定数据库里的数据增量吗?---比如从昨天晚上到今天早上共有200张表发生变化,我想知道哪些表发生了变化,其中有些表是有时间戳的,有些是没有时间戳的。 )


发生了变化是什么意思? 是表中增加了数据(insert)?还是修改了表中的数据(update)?亦或是删除了表中的数据(delete)?
我个人把你说的数据增量理解为增加了数据,我的思路如下:

1.创建表b来记录所有发生数据变化的表,b包含两个字段(table_name, date)
  table_name nverchar //表名
  date    datetime //表更新时的日期

2.create trigger trigger_a on a for insert
  as
  insert into b(table_name,date) select table_name,getdate() from inserted i
  where not exists(select 1 from b where b.table_name = i.table_name and DATEDIFF(dd,b.date,getdate()) = 0  )

获取当前正在被更新的表名是个问题,具体实现可以参考http://www.itpub.net/thread-582900-1-1.html.
这里我采用一个很笨的办法,在所有表中增加一个字段,值为当前表的表名(如值依次为table_1, table_2, ......table_200)
同时假设楼主以天为单位查看表的更新情况,如果一张表某一天被更新了多次,则当天只在b表中插入1条记录

代价是要每张表上都要创建一个trigger,同时都要新建一个栏位来记录表名,很笨啊,应该有更好的办法...

以上方法没有实践, 可行性需要楼主验证.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值