觸發器幾乎肯定是罪魁禍首,尤其是如果你只發現數據庫中的某些表此行爲。
觸發器是當記錄被INSERTED,UPDATED或DELETED(任何或所有這些)時執行的代碼。通常使用觸發器來實現業務規則,寫入審計表等。這是一種在整個應用程序中普遍添加這種行爲而不必重寫大量代碼的便捷方式。缺點當然是缺乏透明度。觸發器並不總是顯而易見的,它們正在運行甚至存在。
如果您在管理工作室中展開tables
樹,請找到一個表現爲這種方式並進一步擴展的表。將會有一個名爲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/
檢查是否有表上的更新觸發器。另外,如果您已啓用顯示執行計劃,則會產生額外的行集,並將信息發送給客戶端 – Andomar 2012-03-05 17:29:47