Триггеры почти наверняка являются виновниками, особенно если вы обнаруживаете такое поведение только в определенных таблицах в базе данных.
Триггер - это код, который выполняется, когда запись ВСТАВЛЕНА, ОБНОВЛЕНА или УДАЛЕНА (любая или все из них). Обычно триггеры используются для реализации бизнес-правил, записи в таблицы аудита и т. Д. Это удобный способ универсального добавления такого рода поведения в приложение без необходимости переписывать много кода. Недостатком является, конечно, отсутствие прозрачности. Триггеры не всегда очевидны, если они запущены или даже существуют.
Если развернуть дерево 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/