2009-09-23 3 views
0

В настоящее время я использую Microsoft Sync Framework, и все работает отлично, за исключением триггеров SQL, которые иногда не срабатывают. Вот код запуска, сгенерированный каркасом. Он работает 90% времени, но иногда CreationDate имеет NULL после вставки. Может ли быть какая-то проблема с датой, которую я пропускаю?SQL 2005 Trigger Not Firing Reliable

set ANSI_NULLS ON 
set QUOTED_IDENTIFIER ON 
GO 
ALTER TRIGGER [dbo].[MyTable_InsertTrigger] 
    ON [dbo].[MyTable] 
    AFTER INSERT 
AS 
BEGIN 
    SET NOCOUNT ON 
    UPDATE [dbo].[MyTable] 
    SET [CreationDate] = GETUTCDATE() 
    FROM inserted 
    WHERE inserted.[DataDate] = [dbo].[MyTable].[DataDate] 
END; 

ответ

1

я предлагаю немного усиления:

set ANSI_NULLS ON 
set QUOTED_IDENTIFIER ON 
GO 
ALTER TRIGGER [dbo].[MyTable_InsertTrigger] 
    ON [dbo].[MyTable] 
    AFTER INSERT 
AS 
BEGIN 
    SET NOCOUNT ON 
    UPDATE [dbo].[MyTable] 
    SET [CreationDate] = GETUTCDATE() 
    FROM inserted, MyTable 
    WHERE inserted.[DataDate] = [dbo].[MyTable].[DataDate] 
END; 

Это происходит потому, что вы можете иметь более чем одну строку в виртуальной таблице ВСТАВЛЯЕМОГО, и для этого он должен быть присоединен к вашему столу [MyTable] правильно; и используйте уникальный ключ для присоединения, так что посмотрите на лучший выбор, чем [DataDate] (если предположить, что это тип [datetime]).

удачи и мира

Ice

1

Там нет ничего, очевидно, неправильно с курком - но тот факт, что вы получаете эти ошибки говорит о том, что в некоторых случаях, соединение между [inserted].[DataDate] и [dbo].[MyTable].[DataDate] не удается, или что триггер отключен, когда вставка имеет место ,

Является ли это упрощенным примером для иллюстрации вашей проблемы? Если нет, вам не нужен триггер для установки CreationDate - почему бы не использовать значение по умолчанию для столбца?

ALTER TABLE dbo.MyTable ADD CONSTRAINT Df_MyTable_CreationDate DEFAULT GETUTCDATE() FOR CreationDate 

(Не забудьте зайти на спусковой крючок)

+2

еще одна причина, чтобы не использовать даты в качестве первичных ключей ... –

0

вложенных триггеров и триггеров или рекурсивный настройки могут предотвратить триггеры образуют стрельбы. Также триггеры могут быть отключены или даже сброшены/воссозданы.