2010-04-30 6 views
0

J'ai SQL Server 2005 et j'ai besoin de créer un déclencheur pour la requête d'insertion. J'ai Table naemd comme "Log" avec la colonne nommée comme UserID, UserName, LogDate, LogTime et que vous souhaitez transférer des données dans une autre table nommée "DataTable" avec le même nom de colonne.Déclencheur pour la table d'insertion

J'ai créé déclencheur

GO 

SET ANSI_NULLS ON 

GO 

SET QUOTED_IDENTIFIER ON 

GO 

CREATE TRIGGER [dbo].[Transfer] on [dbo].[Log] 
AFTER INSERT 
AS 
BEGIN 

insert into DataTable (UserID,UserName,LogDate,LogTime) 

SELECT UserID,UserName,LogDate,LogTime 
FROM Log where UserID not in(select UserID from DataTable) 

END 

Les nouvelles données sont mises à jour quotidiennement dans la table « Log » et donc je veux transférer de nouvelles données de la table journal pour DataTable avec le temps de trigger.Execution est très élevé et ainsi aucune sortie .

+4

Quelle est la question? –

+1

Je ne suis pas sûr de comprendre ce que vous essayez de faire ici. Pouvez-vous expliquer ce que vous essayez d'accomplir? –

+0

@Mitch ... détaché! – kevchadders

Répondre

0

Dans votre définition de déclencheur, vous devez utiliser la table inserted, qui contient toutes les lignes ajoutées à la table de journal.

+0

rejoindre n'est pas nécessaire dans son cas :) – silent

+0

S'il cherche simplement à insérer de nouvelles lignes, comme un journal d'audit pour ainsi dire, il n'y a pas besoin d'une jointure, juste un simple SELECT ... FROM INSERTED. – eidylon

+0

Merci: mis à jour. –

2

vous avez « inséré » table déclencheur, afin que vous puissiez insérer des données de celui-ci

insert into DataTable (UserID, UserName, LogDate, LogTime) 
select UserID, UserName, LogDate, LogTime 
from inserted 
+0

Oui, en sélectionnant dans la table de base, vous insérerez TOUTES les lignes CHAQUE fois, pas seulement les nouvelles lignes. Cela pourrait FACILEMENT expliquer les temps d'exécution longs. Je suis prêt à parier des dollars à des beignets vous avez vraiment besoin de changer INSERER ... SELECT ... DE LOG à INSERT ... SELECT ... FROM INSERTED. – eidylon

Questions connexes