2014-02-16 4 views
1

У меня есть устаревшее приложение, которое отлично работает. Я пытаюсь создать триггер, чтобы вырезать строки в таблице, когда они вставлены в таблицу. Проблема в том, что, как только я включаю триггер, таблица больше не обновляется. Приложение продолжает работать нормально, но я думаю, почему-то есть причина, по которой мой триггер отключает таблицу от обновления? Может кто-нибудь объяснить, как устранить неполадки или что может быть проблема?Стол останавливает обновление при включении триггера

Обновление: после включения триггера, поскольку я сказал, что таблица перестает обновляться. 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.

+0

Является ли 'dbo.trgtskrun' той же таблицей, что и' [Admiral_DEV]. [Dbo]. [Trgtskrun] '? –

+0

разные таблицы, разные БД. Он создает копию таблицы, но добавляет некоторые дополнительные столбцы, чтобы добавить некоторую идентификацию. – whoisearth

+0

Я подозреваю, что у вас есть рекурсивные/вложенные запросы. Это кажется очень простым, когда единственной разницей в таблицах является база данных, в которой будет выполняться код 'create trigger'. Эта структура была бы более безопасной, если бы у вас было другое имя таблицы из исходной таблицы. –

ответ

0

Это немного не ответ, если только кто-то не может указать в правильном направлении, но для людей из будущего проблема связана с правами доступа на исходной или целевой БД (необходимо, чтобы мои администраторы баз данных расследовали) , Я попытался выполнить ту же задачу с тем же приложением в БД, у меня есть полные права, и триггер работает, так что либо мой доступ к исходной, либо целевой БД вызывает разрыв.

ОБНОВЛЕНИЕ - дополнительно проверено и проверено.

ТРИГГЕРЫ и хранимые процедуры, по-видимому, выполняются как учетная запись, которая «владеет» базой данных, поэтому, как только я создал подобный пользователь SQL-доступа в базе данных назначения, как это было в исходной БД, триггер работал как сконструированный.

Смежные вопросы