2009-09-23 6 views
0

J'utilise actuellement Microsoft Sync Framework et tout fonctionne correctement, à l'exception des déclencheurs SQL qui ne semblent pas fonctionner parfois. Voici le code de déclenchement généré par le framework. Cela fonctionne 90% du temps mais parfois le CreationDate est NULL après une insertion. Pourrait-il y avoir un problème de date que je néglige?Le déclencheur SQL 2005 ne se déclenche pas de manière fiable

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; 

Répondre

1

Je suggère un peu amélioration:

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; 

Ceci est parce que vous pouvez avoir plus d'une ligne dans la table virtuelle INSERTION et par conséquent, il doit être joint à votre table [MyTable] correctement; et utilisez une clé unique pour joindre, alors jetez un oeil à un meilleur choix que [DataDate] (en supposant que ce soit de type [datetime]).

Bonne chance et la paix

Ice

1

Il n'y a rien évidemment mal avec la gâchette - mais le fait que vous obtenez ces erreurs suggère que, dans certains cas, la jonction entre [inserted].[DataDate] et [dbo].[MyTable].[DataDate] est un échec, ou que le déclencheur est désactivé lorsque l'insert a lieu .

Est-ce un exemple simplifié pour illustrer votre problème? Sinon, vous n'avez pas vraiment besoin d'un déclencheur pour définir CreationDate - pourquoi ne pas utiliser une valeur par défaut dans la colonne?

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

(Ne pas oublier de laisser tomber le déclencheur)

+2

encore une autre raison de ne pas utiliser les dates clés primaires que ... –

0

déclencheurs imbriqués et ou déclencheurs récursive paramètres peuvent empêcher les déclencheurs forment le tir. Les déclencheurs peuvent également être désactivés ou même supprimés/recréés.

Questions connexes