日期:2014-05-18  浏览次数:20439 次

删除数据库所有的触发器
怎么一次性删除业务数据库所有表的触发器?

------解决方案--------------------
SELECT 'drop trigger '+NAME+ ' go ' FROM SYSOBJECTS
WHERE TYPE= 'TR '
批量执行结果集

------解决方案--------------------
楼上的只是查询,修改下.

declare @sql varchar(8000)
set @sql= ' '
SELECT @sql=@sql+ 'drop trigger '+NAME+char(13) FROM SYSOBJECTS
WHERE TYPE= 'TR '
exec(@sql)
------解决方案--------------------
declare @sql nvarchar(4000)
set @sql= ' '
select @sql=@sql+ 'drop trigger '+NAME+ ' ' from dbo.sysobjects where OBJECTPROPERTY(id, N 'IsTrigger ') = 1
print @sql
execute sp_executesql @sql
------解决方案--------------------
if exists (select * from sysobjects where id = object_id(N '[dbo].[sp_ScriptTriggers] ') and OBJECTPROPERTY(id, N 'IsProcedure ') = 1)
drop procedure [dbo].[sp_ScriptTriggers]
GO

use master
go

create procedure sp_ScriptTriggers
as
/* ************************************************************************************************************* */
/* AUTHOR : De Veirman Marino CREATION DATE : 06/07/2000 */
/* COMPANY : Spector Photo Group N.V. */
/* DESCRIPTION : To use this procedure create it in the master database and run it from any tool that can return */
/* a print statement. Save the output result as *.sql */
/* ************************************************************************************************************* */

set nocount on

declare @name sysname
declare @text varchar(4096)
declare @SQL varchar(255)

declare cur_triggers insensitive cursor for

select name from sysobjects where OBJECTPROPERTY(id, 'ISTRIGGER ') = 1

open cur_triggers

fetch next from cur_triggers into @name
while (@@fetch_status <> -1) begin

print '/* DROP TRIGGER ' + @name + ' ----------------------------------------- */ '
print '/* SCRIPTED ' + Convert(varchar(50),GETDATE()) + ' ---------------- */ '

select @text = 'if exists (select * from sysobjects where id = object_id(N ' ' ' + @name + ' ' ') and OBJECTPROPERTY(id, N ' 'IsTrigger ' ') = 1) '
print @text
select @text = 'drop trigger ' + @name
print @text
print 'GO '

print '/* CREATE TRIGGER ' + @name + '---------------------------------------- */ '
print '/* SCRIPTED ' + Convert(varchar(50),GETDATE()) + ' -------------- */ '
print ' '

select @text = text from syscomments where id = OBJECT_ID(@name)
print @text
print 'GO '

fetch next from cur_triggers into @name
end
close cur_triggers
deallocate cur_triggers
set nocount off