用触发器判断那些列被修改了,得被修改的列名(例子)
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