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?
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
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
.
Ont accès à la fois à une table INSERTED
contenant les valeurs mises à jour et à une table DELETED
contenant les valeurs à mettre à jour.
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.
Vous pouvez utiliser OLD
et NEW
dans le déclencheur pour accéder aux valeurs qui ont changé dans ce déclencheur. Mysql Ref
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é.