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?
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
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.
Vous pouvez utiliser OLD
et NEW
dans le déclencheur pour accéder aux valeurs qui ont changé dans ce déclencheur. Réf Mysql
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.
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é.
Create
trigger `[dbo].[mytrigger]` on `[dbo].[Patients]` after update , insert as
begin
--Sql logic
print 'Hello world'
end