Bonjour,
Lorsqu'on crée un Trigger qui agit sur tout Update ou Insert, comment déterminer si on a affaire à un Update ou à un Insert ?
Je me souviens que sous Oracle, on faisait IF Inserting (je crois) mais ça n'a pas l'air de passer :s
Bonjour,
Lorsqu'on crée un Trigger qui agit sur tout Update ou Insert, comment déterminer si on a affaire à un Update ou à un Insert ?
Je me souviens que sous Oracle, on faisait IF Inserting (je crois) mais ça n'a pas l'air de passer :s
BOnjour,
Les pseudo tables inserted et deleted contiennent les données :
- avant insertion et avant modif pour inserted
- après modif et après suppression pour deleted
Autrement dit s'il s'agit d'une insertion, deleted ne contient aucune ligne.
s'il s'agit d'une suppression inserted ne contient aucune ligne.
D'ou la règle :
1) IF EXISTS(SELECT * FROM INSERTED) AND EXISTS(SELECT * FROM DELETED) => UPDATE
2) IF EXISTS(SELECT * FROM INSERTED) AND NOT EXISTS(SELECT * FROM DELETED) => INSERT
3) IF NOT EXISTS(SELECT * FROM INSERTED) AND EXISTS(SELECT * FROM DELETED) => DELETE
A +
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
* * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *
Impecable, un grand merci pour cette explication brève et précise.![]()
Partager