触发器几乎肯定是罪魁祸首,尤其是当您仅在数据库中的某些表上发现此行为时。
触发器是在记录被插入、更新或删除(任何或所有这些)时执行的代码。通常,触发器用于实现业务规则、写入审计表等。这是一种在应用程序中普遍添加这种行为而无需重写大量代码的便捷方式。当然,缺点是缺乏透明度。触发器并不总是很明显它们正在运行甚至存在。
如果您tables
在 management studio 中展开树,请找到一个以这种方式运行的表并进一步展开它。将有一个名为的文件夹triggers
,您可以展开该文件夹以查看表上定义的任何触发器。
您还可以执行查询以列出触发器,如下所示:
SELECT trigger_name = sysobjects.name, trigger_owner = USER_NAME(sysobjects.uid),table_schema = s.name, table_name = OBJECT_NAME(parent_obj),
isupdate = OBJECTPROPERTY( id, 'ExecIsUpdateTrigger'), isdelete = OBJECTPROPERTY( id, 'ExecIsDeleteTrigger'),
isinsert = OBJECTPROPERTY( id, 'ExecIsInsertTrigger'), isafter = OBJECTPROPERTY( id, 'ExecIsAfterTrigger'),
isinsteadof = OBJECTPROPERTY( id, 'ExecIsInsteadOfTrigger'),
[disabled] = OBJECTPROPERTY(id, 'ExecIsTriggerDisabled')
FROM sysobjects INNER JOIN sysusers ON sysobjects.uid = sysusers.uid
INNER JOIN sys.tables t
ON sysobjects.parent_obj = t.object_id
INNER JOIN sys.schemas s
ON t.schema_id = s.schema_id
WHERE sysobjects.type = 'TR'
*图片取自本网站:http ://www.mssqltips.com/sqlservertip/1380/disable-triggers-in-sql-server-2005/