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

MS SQL Server Discussion :

Alerte sur table non vide


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    web entrepreneur
    Inscrit en
    Novembre 2012
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations professionnelles :
    Activité : web entrepreneur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2012
    Messages : 117
    Par défaut Alerte sur table non vide
    Bonjour,

    J'aimerai avoir une alerte par email lorsque une table "MaTable" n'est pas vide.

    J'ai déjà des alertes lorsqu'un de mes jobs a un problème.
    Donc je voudrai juste créer un job spécifique à cette vérification, qui génèrerait donc une erreur si la table n'est pas vide ou qui est succès si il est vide (ou inversement).

    Vous avez une idée d'une commande à exécuter pour cela svp ?
    Ou un autre mode opératoire ?

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Vous pouvez créer un procédure stockée avec un code similaire au suivant, et l'appeler par un job :

    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
    IF EXISTS
    (
    	SELECT		*
    	FROM		sys.dm_db_partition_stats AS PS
    	INNER JOIN	sys.objects AS T
    				ON PS.object_id = T.object_id
    	INNER JOIN	sys.schemas AS S
    				ON S.schema_id = T.schema_id
    	WHERE		PS.index_id BETWEEN 0 AND 1
    	AND		PS.row_count > 0
    	AND		S.name = 'dbo'
    	AND		T.name = 'MaTable'
    )
    BEGIN
    	EXEC sp_send_dbmail
    		...
    END
    Cela dit je ne vois pas pourquoi vous avez besoin d'avoir une table constamment vide

    @++

  3. #3
    Membre expérimenté
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par elsuket Voir le message
    Bonjour,

    Vous pouvez créer un procédure stockée avec un code similaire au suivant, et l'appeler par un job :

    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
    IF EXISTS
    (
    	SELECT		*
    	FROM		sys.dm_db_partition_stats AS PS
    	INNER JOIN	sys.objects AS T
    				ON PS.object_id = T.object_id
    	INNER JOIN	sys.schemas AS S
    				ON S.schema_id = T.schema_id
    	WHERE		PS.index_id BETWEEN 0 AND 1
    	AND		PS.row_count > 0
    	AND		S.name = 'dbo'
    	AND		T.name = 'MaTable'
    )
    BEGIN
    	EXEC sp_send_dbmail
    		...
    END
    Cela dit je ne vois pas pourquoi vous avez besoin d'avoir une table constamment vide

    @++
    Salut elsuket,

    Un trigger after insert/delete ne pourrait-il pas permettre d'éviter un CRON régulier ?

    Ce qui donnerait en plus l'avantage d'avoir les horaires d'exploitation de la table par mail.

    Cordialement,
    Lyche
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Citation Envoyé par Lyche
    Un trigger after insert/delete ne pourrait-il pas permettre d'éviter un CRON régulier ?
    Tout à fait d'accord, mais nous n'avons pas le contexte.
    J'espère que Trady sera plus explicite

    @++

  5. #5
    Membre confirmé
    Homme Profil pro
    web entrepreneur
    Inscrit en
    Novembre 2012
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations professionnelles :
    Activité : web entrepreneur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2012
    Messages : 117
    Par défaut
    Pour être plus précis, il s'agit d'une requête vide avec la correspondance de 2 tables.
    Lorsque que cette requête n'est plus vide, cela signifie qu'il y a un problème et donc nécessite une alerte.

    Voici ce que j'ai trouvé à mettre dans le job :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    DECLARE @Result INT
    SET @Result = (
    	SELECT COUNT(*)
            FROM dbo.Verif_Alert
    )
     
    IF (@Result > 0) 
        BEGIN
            RAISERROR ('Force SQL Agent Job Failure!', 16, 1)
        END

  6. #6
    Membre expérimenté
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par Trady Voir le message
    Pour être plus précis, il s'agit d'une requête vide avec la correspondance de 2 tables.
    Lorsque que cette requête n'est plus vide, cela signifie qu'il y a un problème et donc nécessite une alerte.

    Voici ce que j'ai trouvé à mettre dans le job :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    DECLARE @Result INT
    SET @Result = (
    	SELECT COUNT(*)
            FROM dbo.Verif_Alert
    )
     
    IF (@Result > 0) 
        BEGIN
            RAISERROR ('Force SQL Agent Job Failure!', 16, 1)
        END
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SET ROWCOUNT 1
    IF EXISTS ( SELECT 1 FROM dbo.Verif_Alert )
        BEGIN
            RAISERROR ('Force SQL Agent Job Failure!', 16, 1)
        END
    SET ROWCOUNT 0

    Je pense qu'en une seule étape, c'est gérable
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

  7. #7
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Citation Envoyé par Trady Voir le message
    Voici ce que j'ai trouvé à mettre dans le job :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    DECLARE @Result INT
    SET @Result = (
    	SELECT COUNT(*)
            FROM dbo.Verif_Alert
    )
     
    IF (@Result > 0) 
        BEGIN
            RAISERROR ('Force SQL Agent Job Failure!', 16, 1)
        END
    ou plus simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    IF EXISTS(
        SELECT 1
        FROM dbo.Verif_Alert
    )
    BEGIN
            RAISERROR ('Force SQL Agent Job Failure!', 16, 1)
    END

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ajouter clé étrangère à table non vide sans erreur 1452?
    Par gb-ch dans le forum SQL Procédural
    Réponses: 9
    Dernier message: 17/06/2018, 17h45
  2. EOF immédiat sur fichier non vide
    Par Azatoth92 dans le forum Langage
    Réponses: 7
    Dernier message: 13/08/2008, 18h36
  3. [RegEx] Requête SQL sur tables non connues à l'avance (regex)
    Par lothar59 dans le forum Langage
    Réponses: 2
    Dernier message: 27/02/2007, 10h33
  4. conditionnelle sur table access vide ou non
    Par SylvainJ dans le forum Access
    Réponses: 4
    Dernier message: 24/07/2006, 15h10
  5. Demarrage sur LModifiable non vide
    Par Orakle dans le forum Access
    Réponses: 1
    Dernier message: 04/10/2005, 18h23

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