Bonjour,

Je travaille avec un serveur SQL 2008.

J'aimerais créer un trigger qui envoie un email lorsqu'il détecte qu'un certain champ lors de l'ajout dans la table a la valeur plus petite que 20.

Mon trigger fonctionne bien comme ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 ALTER TRIGGER [DiskSpace].[low_disk_space_notification]
on [DiskSpace].[FreeSpace]
after insert
AS 
BEGIN
	SET NOCOUNT ON;	
	if (select disksize from inserted where percentage < 20) > 0
	BEGIN
		EXEC msdb..sp_send_dbmail @profile_name = 'ClusterMailProfile',
			@recipients='jacinthe.bouchard@lassonde.com',
			@subject='Subject',
			@body='Body'	
	END
END
Cependant, si j'ajoute la clause @query dans mon envoie de email, alors là, rien ne va plus :

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 [DiskSpace].[low_disk_space_notification]
on [DiskSpace].[FreeSpace]
after insert
AS 
BEGIN
	SET NOCOUNT ON;	
	if (select disksize from inserted where percentage < 20) > 0
	BEGIN
		EXEC msdb..sp_send_dbmail @profile_name = 'ClusterMailProfile',
			@recipients='adresse@compagnie.com',
			@subject='Subject',
			@body='Body',
	              @query='select * from administrator.diskspace.freespace'
	END
END
Avec la clause @query, si je fais un ajout dans ma table, l'insert ne se termine jamais et cela créé un lock sur le serveur !

Je ne comprend pas pourquoi cela ne fonctionne pas ! Vous avez des idées ?

Si j'exécute l'envoie de email en dehors du trigger, cela fonctionne !

Merci,

Baq'