create trigger tr_delete on 表
for delete
as
declare @s varchar(8000)
declare tb cursor local for
select sql='if exists(select 1 from sysobjects where name='''
+字段+''' and xtype=''V'') drop view ['+字段+']'
from deletedopen tb
fetch next from tb into @s
while @@fetch_status=0
begin
exec(@s)
fetch next from tb into @s
end
close tb
deallocate tb

解决方案 »

  1.   

    create trigger trg_delete_tblname on tblname 
    for delete 
    as 
       begin 
         declare @sql varchar(8000)
         set @sql=''
         select @sql='if exists(select 1 from sysobjects where name='''+colname+''' and xtyle='''v''')' drop view '+colname+' ' from deleted
         exec(@sql)
       end
      

  2.   

    --改一下
    create trigger trg_delete_tblname on tblname 
    for delete 
    as 
       begin 
         declare @sql varchar(8000)
         set @sql=''
         select @sql='if exists(select 1 from sysobjects where name='''+colname+''' and xtyle=''v'')  drop view '+colname+' ' from deleted
         exec(@sql)
       end
      

  3.   

    上面的触发器中,字段就是你记录视图名字段名deleted就是记录了被删除的记录定义游标是为了处理同时处理多条记录的情况.
      

  4.   

    不用游标:create trigger tr_delete on 表
    for delete
    as
    declare @sql varchar(8000)
    set @sql=''
    select @sql=@sql+' if exists(select 1 from sysobjects where name='''
    +字段+''' and xtype=''V'') drop view ['+字段+']'
    from deletedexec(@s)
      

  5.   

    抄错了,更正一下:create trigger tr_delete on 表
    for delete
    as
    declare @sql varchar(8000)
    set @sql=''
    select @sql=@sql+' if exists(select 1 from sysobjects where name='''
    +字段+''' and xtype=''V'') drop view ['+字段+'] '
    from deletedexec(@sql)
      

  6.   

    谢谢各位的指点,我已经解决问题了!、我是我现在还有个问题,我已经怎么样取得正在被删除的行的信息(deleted),但是怎么样知道正在被添加行的信息呢?
      

  7.   

    取得正在被删除的行的信息
    select * from deleted
    在被添加行的信息
    select * from inserted
      

  8.   

    注意,上面的 deleted,inserted表是触发器中特有的逻辑表,只能在触发器中操作.
      

  9.   

    知道了,谢谢!更新是不是就是:updated
      

  10.   

    当然不是,更新就是:
    inserted表中记录了更新后记录的值
    deleted 表中记录了更新前记录的值一次性插入多条语句当然是可能的啦,是否用游标看你的处理要求,如果能直接处理,就直接处理,如果要逐条处理,就用游标.
      

  11.   

    inserted表
    deleted 表是不是相当于临时表的意思,用于缓存与此次更新相关的记录的值?