用触发器判断那些列被修改了,得被修改的列名(例子)

用触发器判断那些列被修改了,得被修改的列名(例子)

 

create  table  t  (   

        Col01  int  ,  Col02  int  ,  Col03  int  ,  Col04  int  , 

        Col05  int  ,  Col06  int  ,  Col07  int  ,  Col08  int  , 

        Col09  int  ,  Col10  int  ,  Col11  int  ,  Col12  int  , 

        Col13  int  ,  Col14  int  ,  Col15  int  ,  Col16  int  , 

        Col17  int 

); 

go 

insert  into  t  values  ( 

        1  ,  2  ,  3  ,  4  ,  5  ,  6  ,  7  ,  8  ,  9  ,  10  ,  11  ,  12  ,  13  ,  14  ,  15  ,  16  ,  17 

); 

go 

create  trigger  tri_test  on  t  for   

update 

as 

begin 

declare  @i  int 

select  @i=count(*)  from  syscolumns  where  id=object_id('t') 

while  @i>0 

begin 

if  substring(  columns_updated()  ,  (@i-1)/8+1  ,  1  )  &  power(  2,  (@i-1)%8  )  >  0 

print  '第'+rtrim(@i)+'列修改' 

set  @i=@i-1 

end 

end 

go 

update  t  set  col17=1,col15=1,col16=1,col14=1,col09=1,col11=1,col01=1,col02=1,col03=1 

go 

/* 

结果: 

第17列修改 

第16列修改 

第15列修改 

第14列修改 

第11列修改 

第9列修改 

第3列修改 

第2列修改 

第1列修改 

*/ 

 

 

--修改一下方式: 

alter  trigger  tri_test  on  t  for   

update 

as 

begin 

declare  @i  int 

select  @i=count(*)  from  syscolumns  where  id=object_id('t') 

while  @i>0 

begin 

if  substring(  columns_updated()  ,  (@i-1)/8+1  ,  1  )  &  power(  2,  (@i-1)%8  )  >  0 

print  '列"'+col_name(object_id('t'),@i)+'"修改' 

set  @i=@i-1 

end 

end 

 

go 

 

update  t  set  col17=1,col15=1,col16=1,col14=1,col09=1,col11=1,col01=1,col02=1,col03=1 

/* 

结果: 

列"Col17"修改 

列"Col16"修改 

列"Col15"修改 

列"Col14"修改 

列"Col11"修改 

列"Col09"修改 

列"Col03"修改 

列"Col02"修改 

列"Col01"修改 

*/ 

--------------------------------------------------------------- 
作者来自:csdn 发布人:admin 发布时间:2004-10-10

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值