У меня есть устаревшее приложение, которое отлично работает. Я пытаюсь создать триггер, чтобы вырезать строки в таблице, когда они вставлены в таблицу. Проблема в том, что, как только я включаю триггер, таблица больше не обновляется. Приложение продолжает работать нормально, но я думаю, почему-то есть причина, по которой мой триггер отключает таблицу от обновления? Может кто-нибудь объяснить, как устранить неполадки или что может быть проблема?Стол останавливает обновление при включении триггера
Обновление: после включения триггера, поскольку я сказал, что таблица перестает обновляться. IE. Я могу получить trgtskrun_id из 2345678 и больше не загружать строки. как только я остановлю триггер после краткой паузы, строки начнут вставлять снова, но НЕ на следующем логическом номере, что означает, что строки, которые должны записываться в таблицу, теряются в системе где-то? Когда я запустил его резервное копирование, используя пример выше следующего номера, это 2345685, поэтому несколько транзакций были в конечном счете сняты с момента написания. очень странно.
Для потомков здесь мой триггер -
GO
/****** Object: Trigger [dbo].[trig_trgtskrunUpdate] Script Date: 15/02/2014 11:27:49 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER TRIGGER [dbo].[trig_trgtskrunUpdate] ON [dbo].[trgtskrun]
AFTER INSERT
AS
SET NOCOUNT ON;
DECLARE @HistoryType char(1) --"I"=insert, "U"=update, "D"=delete
SET @HistoryType=NULL
IF EXISTS (SELECT * FROM INSERTED)
BEGIN
--INSERT
SET @HistoryType='I'
--handle insert or update data
INSERT INTO [Admiral_DEV].[dbo].[happycopy]
(trgtskrun_revtype, trgtskrun_revtm, trgtskrun_id, trgtskrun_payload, trgtskrun_status,
trgtskrun_crtdt, trgtskrun_rundt, trgtskrun_parent, trgtskrun_transaction, trgtskrun_expire, trgtskrun_data,
trgmst_id, tskmst_id, jobmst_id, jobrun_id, nodmst_id, nodmst_target, servicemst_id, servicemst_target,
usrmst_id)
SELECT
@HistoryType, GETDATE(), trgtskrun_id, trgtskrun_payload, trgtskrun_status,
trgtskrun_crtdt, trgtskrun_rundt, trgtskrun_parent, trgtskrun_transaction, trgtskrun_expire, trgtskrun_data,
trgmst_id, tskmst_id, jobmst_id, jobrun_id, nodmst_id, nodmst_target, servicemst_id, servicemst_target,
usrmst_id
FROM trgtskrun where trgtskrun_id = (select MAX(trgtskrun_id) from trgtskrun)
END
К любому вопросу о конструкции, как говорил его из имя_таблицы вместо FROM INSERTED/УДАЛИТЬ те не позволяют копии текстовых столбцов которых есть в них поэтому таблицы должны делать FROM tablename.
Является ли 'dbo.trgtskrun' той же таблицей, что и' [Admiral_DEV]. [Dbo]. [Trgtskrun] '? –
разные таблицы, разные БД. Он создает копию таблицы, но добавляет некоторые дополнительные столбцы, чтобы добавить некоторую идентификацию. – whoisearth
Я подозреваю, что у вас есть рекурсивные/вложенные запросы. Это кажется очень простым, когда единственной разницей в таблицах является база данных, в которой будет выполняться код 'create trigger'. Эта структура была бы более безопасной, если бы у вас было другое имя таблицы из исходной таблицы. –