日期:2014-05-20  浏览次数:20717 次

请问这个需求如何解决.谢谢各位!
要创建触发器的表结构:
create   table   test   (
aaa   int,
bbb   varchar(20),
ccc   varchar(20),
ddd   varchar(20),
eee   varchar(20)
constraint     test_PR_   PRIMARY   KEY(aaa)  
)

对上表进行字段触发,如何动态产生更新触发器

create   trigger   test_update
on   test
for   update
as  
if   update(aaa)
begin
  select     主键旧值=D.aaa   FROM   deleted     D
    insert   into   A_TRIGER(表名,主键旧值,字段名)   values( 'test ',主键旧值,aaa)    
end

else   if   update(bbb   )
begin
    select     主键旧值=D.aaa   FROM   deleted     D
    insert   into   A_TRIGER(表名,主键旧值,字段名)   values( 'test ',主键旧值,bbb)
end

else   if   update(ccc)
begin
    select     主键旧值=D.aaa   FROM   deleted     D
    insert   into   A_TRIGER(表名,主键旧值,字段名)   values( 'test ',主键旧值,ccc)
end

else   if   update(ddd)
begin
    select     主键旧值=D.aaa   FROM   deleted     D
    insert   into   A_TRIGER(表名,主键旧值,字段名)   values( 'test ',主键旧值,ddd)
end

else   if   update(eee)
begin
      select     主键旧值=D.aaa   as   主键旧值     FROM   deleted     D
    insert   into   A_TRIGER(表名,主键旧值,字段名)   values( 'test ',主键旧值,eee)
end
end

请问这个动态的sql语句如何实现.谢谢各位了.谢谢.

------解决方案--------------------
是Oracle么?

如果是更新的话,可以用

create trigger test_update 
before update on test for each row

....

下面可以比较哪一列更新前后的值来判断是否要更新本列