SQL Server trigger insère des valeurs de la nouvelle ligne dans une autre table

J'ai un site utilisant le asp.net schéma d'adhésion. Je voudrais configurer un déclencheur sur la table aspnet_users qui a inséré l'id_utilisateur et le nom_utilisateur de la nouvelle ligne dans une autre table.

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

Je peux sélectionner par le dernier date_created mais cela semble malodorant. Est-il un meilleur moyen?

29
demandé sur John Saunders 2010-02-12 00:01:50

5 réponses

Essayez ceci pour sql server

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
56
répondu KM. 2010-02-11 21:08:58

Vous utilisez un déclencheur d'insertion - à l'intérieur du déclencheur, les éléments de ligne insérés seront exposés comme 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 Delete ont accès à une table logique similaire appelée DELETED.

Les déclencheurs de mise à jour

Ont accès à la fois à une table INSERTED contenant les valeurs mises à jour et à une table DELETED contenant les valeurs à mettre à jour.

12
répondu Oded 2010-02-11 21:08:15

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

Donc, dans le déclencheur (vous pouvez rechercher facilement les parties create trigger), 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

Lors de l'écriture 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 de plusieurs insertions de lignes dans votre code.

5
répondu HLGEM 2010-02-11 21:08:41

Vous pouvez utiliser OLD et NEW dans le déclencheur pour accéder aux valeurs qui ont changé dans ce déclencheur. Mysql Ref

4
répondu Teja Kantamneni 2010-02-11 21:04:03

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

4
répondu cmsjr 2010-02-11 21:04:18