我的一个库中很多表上都有update的触发器,请问我如何写个语句来禁用或启动库里的所有update触发器。写一个循环?
select all trigger form sys.
disable all trigger 
update all table
enable all trigger ????

解决方案 »

  1.   

    ALTER TABLE TABLENAME DISABLED TRIGGER TRIGGERNAME
      

  2.   

    ALTER TABLE TABLENAME DISABLE TRIGGER TRIGGERNAME
      

  3.   

    --禁用所有表所有触发器
    declare @sql varchar(8000)
    set @sql=''
    select @sql=@sql+' ALTER TABLE '+NAME+' DISABLE TRIGGER ALL' from sysobjects tb
    where type='u'
    and exists (select 1 from sysobjects tr
    where tb.id=tr.parent_obj
    and tr.type='tr'
    )exec( @sql)
    --开启所有表所有触发器declare @sql varchar(8000)
    set @sql=''
    select @sql=@sql+' ALTER TABLE '+NAME+' ENABLE TRIGGER ALL' from sysobjects tb
    where type='u'
    and exists (select 1 from sysobjects tr
    where tb.id=tr.parent_obj
    and tr.type='tr'
    )exec( @sql)
      

  4.   

    生成一个批处理sql:select 'ALTER TABLE '+a.name+ 'DISABLE TRIGGER  '+b.name
    from sysobjects a,sysobjects b
    where b.parent_obj = a.id
    and a.xtype = 'U'
    and b.xtype = 'Tr'然后批量之行
      

  5.   

    注意:上面的方法如果有触发器的表太多,可能会超出8000的限制另一个方法(微软未公开存储过程,以后的版本可能不支持):
    --禁用所有表所有触发器
    exec sp_msforeachtable 'ALTER TABLE ? DISABLE TRIGGER ALL'--开启所有表所有触发器
    exec sp_msforeachtable 'ALTER TABLE ? ENABLE TRIGGER ALL'