--游标最好使用批处理语句来替代,这样速度更快(一般只有一个表的值作为执行语句的一个参数时,才使用游标,若是表间级联关系的操作就可以使用批语句出来)
--下面的语句可以禁用当前数据库中的所有 DML 触发器:
DECLARE @schema_name sysname, @trigger_name sysname, @object_name sysname ;
DECLARE @sql nvarchar(max) ;
DECLARE trig_cur CURSOR FORWARD_ONLY READ_ONLY FOR
SELECT SCHEMA_NAME(schema_id) AS schema_name,
name AS trigger_name,
OBJECT_NAME(parent_object_id) as object_name
FROM sys.objects WHERE type in ('TR', 'TA') ;
OPEN trig_cur ;
FETCH NEXT FROM trig_cur INTO @schema_name, @trigger_name, @object_name ;
WHILE @@FETCH_STATUS = 0 --前一个游标执行语句返回情况
BEGIN
SELECT @sql = 'DISABLE TRIGGER ' + QUOTENAME(@schema_name) + '.'
+ QUOTENAME(@trigger_name) +
' ON ' + QUOTENAME(@schema_name) + '.'
+ QUOTENAME(@object_name) + ' ; ' ;
print (@sql);
EXEC (@sql) ;
FETCH NEXT FROM trig_cur INTO @schema_name, @trigger_name, @object_name ;
END
close trig_cur
deallocate trig_cur
--if @@error<>0 rollback tran
--else commit tran
GO