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 :

récupéré une valeur depuis une procédure stockée système


Sujet :

MS SQL Server

  1. #1
    Membre actif
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 193
    Points : 213
    Points
    213
    Par défaut récupéré une valeur depuis une procédure stockée système
    Bonjour,

    Voilà avant d'aller jouer dans les tables sysagent etc qui pourrait porter préjudice a la durée de vie de mon code.

    Je voulais utiliser une procédure système.

    Le principe est simple, détecter si un job est en train de s'exécuter ou pas afin de pouvoir effectuer un sp_stop_job sans recevoir de message d'erreur.

    Les bouts de code fonctionne, mais et ça j'en connais la raison, le insert exect me renvoit une erreur nested exception. C'est simplement que je n'ai pas trouvé d'autre méthode qui pourrait marcher.


    Mon code est écrit 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
    select @jobname = jobname from inserted where numero = @numero
    if exists (select * from tempdb.information_schema.tables where table_name like '#tmppp%')
    drop table #tmppp
    CREATE TABLE #tmppp (id uniqueidentifier, serv nvarchar(30), nom sysname, enabl tinyint, descript nvarchar(512), start_step_id int, category sysname, owne sysname, notify_lev int, notify_em int, notify_ne int, notify_pa int, notify_emop sysname, notify_neop sysname, notify_paop sysname, delet int, datecre datetime, datemod datetime, version int, lastrun int, lastrunt int, lastrunout int, next_run int, next_runt int, next_runs int, current_exec_status int, current_exec_step sysname, current_retry int, has_step int, has_sched int, has_target int, type int)
    INSERT INTO #tmppp
    EXEC msdb.dbo.sp_help_job @job_name = @jobname, @job_aspect = 'job'
     
    if((select current_exec_status from #tmppp) in (1,2,7))
    exec msdb.dbo.sp_stop_job @job_name = @jobname
    if exists (select * from tempdb.information_schema.tables where table_name like '#tmppp%')				
    drop table #tmppp
     
    exec msdb.dbo.sp_update_job @job_name = @jobname
    , @enabled = 0
    mon code est a l'intérieur d'un trigger et donc évidement ça ne fonctionne plus puisque j'ai une erreur nested que soit je voudrais masquer car j'ai bien les résultats souhaité, soit une méthode plus propre pour récupérer la valeur 'current_exec_status' pour mon job

  2. #2
    Membre actif
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 193
    Points : 213
    Points
    213
    Par défaut
    pour répondre a mes propres questions

    Voilà ce que je voulais faire vérifier si un job était en train de fonctionner et si c'est le cas l'arreter sinon ne rien faire

    Voici 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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    DECLARE @can_see_all_running_jobs INT  
    DECLARE @job_owner   sysname  
    declare @job_id uniqueidentifier
     
    SELECT @can_see_all_running_jobs = ISNULL(IS_SRVROLEMEMBER(N'sysadmin'), 0)  
      IF (@can_see_all_running_jobs = 0)  
      BEGIN  
        SELECT @can_see_all_running_jobs = ISNULL(IS_MEMBER(N'SQLAgentReaderRole'), 0)  
      END  
      SELECT @job_owner = SUSER_SNAME()  
     
    select @job_id = job_id  from sysjobs where [name] = 'toto'
     
    DECLARE @xp_results TABLE (job_id                UNIQUEIDENTIFIER NOT NULL,  
                                last_run_date         INT              NOT NULL,  
                                last_run_time         INT              NOT NULL,  
                                next_run_date         INT              NOT NULL,  
                                next_run_time         INT              NOT NULL,  
                                next_run_schedule_id  INT              NOT NULL,  
                                requested_to_run      INT              NOT NULL, -- BOOL  
                                request_source        INT              NOT NULL,  
                                request_source_id     sysname          COLLATE database_default NULL,  
                                running               INT              NOT NULL, -- BOOL  
                                current_step          INT              NOT NULL,  
                                current_retry_attempt INT              NOT NULL,  
                                job_state             INT              NOT NULL)  
     
      IF ((@@microsoftversion / 0x01000000) >= 8) -- SQL Server 8.0 or greater  
        INSERT INTO @xp_results  
        EXECUTE master.dbo.xp_sqlagent_enum_jobs @can_see_all_running_jobs, @job_owner, @job_id
      ELSE  
        INSERT INTO @xp_results  
        EXECUTE master.dbo.xp_sqlagent_enum_jobs @can_see_all_running_jobs, @job_owner  
     
    if(exists(select * from @xp_results where job_state in (1,2,7)))
    exec msdb.dbo.sp_stop_job @job_name = 'toto'

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  2. Déplacer des valeurs depuis une feuille dans une autre
    Par michou iut dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 22/04/2009, 16h13
  3. Insérer une valeur depuis une requête vers un formulaire
    Par baila dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 07/08/2007, 11h07
  4. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48
  5. [SQL] Affichage d'une valeur depuis une requête
    Par kitty2006 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 19/09/2006, 16h38

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