web-dev-qa-db-fra.com

Le déclencheur SQL Server insère des valeurs d'une nouvelle ligne dans une autre table

J'ai un site utilisant le schéma d'adhésion asp.net. Je voudrais mettre en place un déclencheur sur la table aspnet_users qui a inséré le user_id et le user_name de la nouvelle ligne dans une autre table.

Comment puis-je obtenir les valeurs de la dernière insertion?

Je peux sélectionner par la dernière date_created mais cela semble malodorant. Y a-t-il une meilleure façon?

30
jim

essayez ceci pour le serveur sql

CREATE TRIGGER yourNewTrigger ON yourSourcetable
FOR INSERT
AS

INSERT INTO yourDestinationTable
        (col1, col2    , col3, user_id, user_name)
    SELECT
        'a'  , default , null, user_id, user_name
        FROM inserted

go
58
KM.

Vous utilisez un déclencheur d'insertion - à l'intérieur du déclencheur, les éléments de ligne insérés seront exposés sous la forme d'une table logique INSERTED, qui a la même disposition de colonne que la table sur laquelle le déclencheur est défini.

Les déclencheurs de suppression ont accès à une table logique similaire appelée DELETED.

Les déclencheurs de mise à jour ont accès à la fois à une table INSERTED qui contient les valeurs mises à jour et à une table DELETED qui contient les valeurs à mettre à jour.

14
Oded

Vous pouvez utiliser OLDet NEW dans le déclencheur pour accéder aux valeurs qui ont changé dans ce déclencheur. Réf Mysql

5
Teja Kantamneni

Dans un déclencheur SQL Server, vous disposez de deux psdeuotables appelés insérés et supprimés. Ceux-ci contiennent les anciennes et nouvelles valeurs de l'enregistrement.

Donc, dans le déclencheur (vous pouvez facilement rechercher les parties de déclencheur de création), vous feriez quelque chose comme ceci:

Insert table2 (user_id, user_name)
select user_id, user_name from inserted i
left join table2 t on i.user_id = t.userid
where t.user_id is null

Lorsque vous écrivez des déclencheurs, rappelez-vous qu'ils agissent une fois sur l'ensemble du lot d'informations, ils ne traitent pas ligne par ligne. Tenez donc compte des insertions de plusieurs lignes dans votre code.

5
HLGEM

Lorsque vous êtes dans le contexte d'un déclencheur, vous avez accès à la table logique INSERTED qui contient toutes les lignes qui viennent d'être insérées dans la table. Vous pouvez créer votre insert dans l'autre table en fonction d'une sélection dans Inséré.

4
cmsjr
Create 
trigger `[dbo].[mytrigger]` on `[dbo].[Patients]` after update , insert as
begin
     --Sql logic
     print 'Hello world'     
 end 
1
Adil iqbal