2010-07-30 5 views
2

Je suis très nouveau à SQL alors pardonnez mon ineptie.Insérer de table1 à table2 sur le déclencheur d'insertion

Je suis en train d'écrire un déclencheur qui, à l'insertion à la table 1, insère cet enregistrement dans le tableau 2.

tableau 1 est [rps_lab_dev].[dbo].[Lab_Employee_Time_Off]

tableau 2 est [dbo].[Lab_Employee_Time_Off_Detail]

CREATE TRIGGER updatetrig 
ON [rps_lab_dev].[dbo].[Lab_Employee_Time_Off] 

FOR INSERT 

AS 
... 

Je ne suis pas sûr de savoir où aller à partir d'ici (si c'est même correct, je n'ai pas de sql à vérifier dès maintenant). Toute direction serait grandement appréciée.

+1

Qu'est-ce que SGBDR utilisez-vous? La syntaxe de déclenchement varie entre Oracle, MySQL, etc. –

+1

Bonjour, et bienvenue dans Stack Overflow. Quel est le moteur de base de données? –

+0

Je voudrais savoir comment "sentir" les requêtes T-SQL/SQL Server comme beaucoup d'autres peuvent le faire sur cette carte ... –

Répondre

5

Lorsque vous êtes dans un déclencheur pour un INSERT, vous obtenez un ensemble d'enregistrements appelé INSERTED. Vous pouvez l'utiliser pour effectuer les actions que vous voulez.

Si vous êtes dans le déclencheur d'un UPDATE, vous obtenez deux ensembles de données DELETED et INSERTED - logiquement où DELETED est l'ancienne donnée qui va être écrasée par les nouvelles données INSERTED.

Dans votre cas, faisons quelques choses ici. Tout d'abord, c'est un déclencheur INSERT, alors appelons ça. Ensuite, nous allons obtenir les données de INSÉRÉ (qui ont les mêmes noms de colonnes que vos données entrantes) et l'utiliser pour insérer dans votre tableau de détails

CREATE TRIGGER Lab_Employee_Time_Off_InsertAction 
ON [rps_lab_dev].[dbo].[Lab_Employee_Time_Off] 

FOR INSERT 

AS 


INSERT INTO [dbo].[Lab_Employee_Time_Off_Detail] (Col01, Col02, Col03) 
SELECT Col1, Col2, Col3 
FROM Inserted 

GO 

http://msdn.microsoft.com/en-us/library/ms189799.aspx

+2

Une autre chose qu'il est important de mentionner est que les déclencheurs dans SQL Server fonctionnent une fois par insertion et si vous insérez un groupe d'enregistrements doit être capable de gérer cela. Ce code fait cela, mais je voulais que la personne qui a posé la question comprenne pourquoi utiliser la logique basée sur les ensembles et ne pas essayer de mettre les choses dans une variable et d'utiliser la clause des valeurs. En outre, testez toujours un déclencheur en effectuant une mise à jour ou une suppression d'insertion sur plusieurs lignes. – HLGEM

+0

Excellente réponse, merci beaucoup pour l'aide et la perspicacité. –

5

Pour SQL Server ...

CREATE TRIGGER updatetrig 
ON [rps_lab_dev].[dbo].[Lab_Employee_Time_Off] 

FOR INSERT 

AS 

INSERT INTO [dbo].[Lab_Employee_Time_Off_Detail] (Column1, Column2, Column3) 
SELECT Column1, Column2, Column3 FROM inserted 

Il suffit de remplacer Column1, Colonne2 et Colonne3 avec vos noms de colonnes.

Questions connexes