Я использую Delphi 5 с SQL Server 2000 здесь.ADOQuery обходит вместо триггера удаления
Я создал ADOQuery поверх обновляемого представления с помощью триггера INSTEAD OF DELETE.
Обновляемый вид в основном используется для управления мягкими удалениями. Он отфильтровывает записи, которые помечены как удаленные, и также скрывает контрольный столбец.
Все работает отлично, когда я выдаю команды DELETE напрямую в базу данных. Я удаляю запись в представлении, и базовая таблица обновляется, делая мягкое удаление, как ожидалось.
Когда я пытаюсь использовать ADOQuery для удаления записи, он обходит представление и удаляет запись непосредственно в базовой таблице, поэтому триггер вместо этого в представлении никогда не запускается.
Я также использую ссылочные ограничения, и удаление из-за них является ошибкой из-за них, но я не знаю, если это имеет значение. Это не происходит при выдаче команд удаления в представление.
Кто-нибудь из вас, ребята, знает, как обойти это раздражающее поведение?
Вы пробовали профилировать сервер, чтобы увидеть, какие команды SQL выполняет ADOQuery? –
Exec sp_executesql N'DELETE ОТ "CONTROLEPROCESSOS_MIGRACAO" .. "_ tblCadUsuarios", где "CODUSUARIO" = @ P1' , N '@ P1 NVARCHAR (5)', N'40/04' _tblCadUsuarios является фактической таблицей, а представление называется tblCadUsuarios –
Знание SQL-сервера датировано, и я могу попирать все, что он/не способен, но почему триггер INSTEAD OF DELETE, определенный на представлении, а не каким-то образом реализованным напрямую против стола? Если бы я хотел мягких удалений на столе, я попытался бы убедиться, что у меня (или у кого-нибудь еще) не будет проблем, потому что я забыл использовать представление ...? –