Bonjour,

Je suis débutant dans ce domaine et il y a une notion concernant les triggers que je ne comprend pas.

Concrètement, je souhaite déterminer après un insert si une personne est présente dans un annuaire. Si elle l'est, mettre à jour son numéro sinon rajouter une ligne.
J'ai lu que ce langage prend les insertions dans un ensemble, la table "inserted" et que parcourir cette table est inutile.
Dans ce cas, comment émettre une condition qui dit "si une des lignes est présente, on lance un update sinon on lance un insert sur cette ligne en particulier".

C'est le fait de ne pas mettre de boucle qui me pose problème.

Le code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
ALTER TRIGGER [dbo].[MaJ] ON [dbo].[personnes] 
AFTER INSERT AS
BEGIN TRY
	--Recherche de la personne dans l'annuaire
	if ((SELECT * FROM dbo.Annuaire A INNER JOIN inserted I on A.Login = I.Login WHERE inserted.Login = A.Login) = null)
	BEGIN
		--Si elle n'est pas présente, on ajoute le tuple dans l'annuaire téléphonique
		SET NOCOUNT ON;
		INSERT INTO [dbo].[Annuaire]
			SELECT i.Login, REPLACE(i.Tel, ' ', ''), CONCAT('3', RIGHT(REPLACE(i.Tel, ' ', ''), 4)) 
			FROM inserted i
        END
		--Sinon on update
...
En vous remerciant,
Mel