IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Trigger qui envoie un email


Sujet :

Développement SQL Server

  1. #1
    Membre habitué Avatar de Baquardie
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Alimentation

    Informations forums :
    Inscription : Juillet 2003
    Messages : 267
    Points : 144
    Points
    144
    Par défaut Trigger qui envoie un email
    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'
    Rien n'est impossible à celui qui n'a pas à le faire
    DBA. Je travaille avec SQL-9, SQL-10

  2. #2
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Que donne l'exécution de cette requête ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from administrator.diskspace.freespace
    Etienne ZINZINDOHOUE
    Billets-Articles

  3. #3
    Membre habitué Avatar de Baquardie
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Alimentation

    Informations forums :
    Inscription : Juillet 2003
    Messages : 267
    Points : 144
    Points
    144
    Par défaut
    Le contenu de la table, soit 246 enregistrements.
    Rien n'est impossible à celui qui n'a pas à le faire
    DBA. Je travaille avec SQL-9, SQL-10

  4. #4
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Essaye ceci pour voir

    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
    16
    17
     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',
                            @attach_query_result_as_file = 0 
     
    	END
    END
    Etienne ZINZINDOHOUE
    Billets-Articles

  5. #5
    Membre habitué Avatar de Baquardie
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Alimentation

    Informations forums :
    Inscription : Juillet 2003
    Messages : 267
    Points : 144
    Points
    144
    Par défaut
    Cela ne fonctionne pas plus, ma requête d'insertion crée un lock et je dois killer le process pour qu'il cesse de rouler.
    Rien n'est impossible à celui qui n'a pas à le faire
    DBA. Je travaille avec SQL-9, SQL-10

  6. #6
    Membre habitué Avatar de Baquardie
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Alimentation

    Informations forums :
    Inscription : Juillet 2003
    Messages : 267
    Points : 144
    Points
    144
    Par défaut
    J'ai trouvé un workaround à mon problème. J'envoie les informations dans le body du email comme suit...

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    USE [Administrator]
    GO
    /****** Object:  Trigger [DiskSpace].[low_disk_space_notification]    Script Date: 08/25/2010 11:38:13 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    -- Author:		
    -- Create date: 13 Aout 2010
    -- Description:	Envoie un email lorsqu'un drive est en bas de 20% d'espace libre
    -- =============================================
    ALTER TRIGGER [DiskSpace].[low_disk_space_notification]
    on [DiskSpace].[FreeSpace]
    after insert
    AS 
    BEGIN
    	-- SET NOCOUNT ON added to prevent extra result sets from
    	-- interfering with SELECT statements.
    	SET NOCOUNT ON;
     
    	if (select disksize from inserted where percentage < 20) > 0
    	BEGIN
     
    		declare @computer as varchar(128)
    		declare @drive as varchar(2)
    		declare @drivename as varchar(15)
    		declare @percentage as decimal(10,5)
    		declare @message as varchar(max)
     
    		select @computer = computer, @drive = drive, @drivename = drivename, @percentage = percentage
    		from inserted
    		where percentage < 20
     
    		set @message = 'L''espace disque devient critique pour le serveur ' + @computer + ' sur le drive ' + @drive + ' ( ' + @drivename + ' ) 
    			avec un pourcentage de non utilisation de ' + cast(@percentage as varchar(15)) + ' pourcent.  FAITES QUELQUES CHOSE !!!!!'
     
    		EXEC msdb..sp_send_dbmail @profile_name = 'ClusterMailProfile',
    			@recipients='usager@compagnie.com',
    			@subject='!! Espace Disque Critique sur serveur SQL !!',
    			@body=@message
     
    	END
     
     
    END
    Rien n'est impossible à celui qui n'a pas à le faire
    DBA. Je travaille avec SQL-9, SQL-10

  7. #7
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    C'est quand même bizarre que ta première méthode ne marche pas !
    Si tu un peu de temps et tu ne trouves pas d'inconvénients à cela on peut creuser un peu le sujet, parce que j'ai presque le même script mais ça marche nickel chez moi (sur SQL 2005 standard)

    Si tu veux essayons ce script pour voir

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    ALTER TRIGGER [DiskSpace].[low_disk_space_notification]
    ON [DiskSpace].[FreeSpace]
    after INSERT
    AS 
    BEGIN
    	-- SET NOCOUNT ON added to prevent extra result sets from
    	-- interfering with SELECT statements.
    	SET NOCOUNT ON;
     
    	IF (SELECT disksize FROM inserted WHERE percentage < 20) > 0
    	BEGIN
     
     
    		declare @message AS varchar(max)	
    		SET @message = 'L''espace disque devient critique pour le serveur FAITES QUELQUES CHOSE !!!!!'
    		EXEC msdb..sp_send_dbmail @profile_name = 'ClusterMailProfile',
    			@recipients='usager@compagnie.com',
    			@subject='!! Espace Disque Critique sur serveur SQL !!',
    			@body=@message
    			@query='select * from administrator.diskspace.freespace'
     
    	END
     
    END
    Etienne ZINZINDOHOUE
    Billets-Articles

Discussions similaires

  1. [WD-2000] macro qui envoi email
    Par ouflala dans le forum VBA Word
    Réponses: 4
    Dernier message: 07/05/2010, 14h06
  2. envoi d'email qui contien du CSS
    Par H-bil dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 19/09/2006, 14h04
  3. envoie d'email
    Par ZZ dans le forum ASP
    Réponses: 8
    Dernier message: 16/12/2003, 10h53
  4. Réponses: 5
    Dernier message: 25/11/2003, 09h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo