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 :

[SQL2K8] boucle dans une procédure stockée


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 126
    Points : 54
    Points
    54
    Par défaut [SQL2K8] boucle dans une procédure stockée
    Bonjour,

    je suis en train de mettre en place une procédure stockée qui vérifie toutes les X secondes l'étape à laquelle se trouve un job
    le job en question à mettons 5 étapes.
    je veux que la SP arrête le job s'il est à une certaine étape, et patiente s'il est à une autre étape.

    Je procède donc 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
     
    CREATE  procedure test_job
    as
    begin
    declare @current_step nvarchar(50);
    declare @cpt int;
    set @cpt = 1
     
    select @current_step = current_execution_step
    from (
    SELECT current_execution_step
    		from OPENROWSET('XXX', 'EXEC MSDB.dbo.sp_help_job @execution_status = 1')
    		where name = 'JOB_TEST' ) t
     
    while @cpt = 1
    begin
     
    	if @current_step = '2 (check_step)'
    	or @current_step = '4 (other_check_step)'
    	 begin
    		WAITFOR DELAY '000:00:10'
     		set @cpt = 1;
    	  end
    	  else if @current_step = '3  (exit_step)'	
    	   begin 
    		EXEC dbo.sp_stop_job @job_name = 'JOB_TEST'
     		set @cpt = 0;
    	  end
    end
    end
    Mon problème est qu'il ne respecte pas la condition.
    En fait, suivant l'étape où le job se trouve au moment où la SP est lancée, il suit la condition, mais au passage à l'étape suivante du job, il ne se passe rien :

    ex :
    job étape 2
    lancement SP : il attend
    job étape 3
    SP toujours en exécution : il attend toujours ...

    si j'arrête la SP alors qu'il est à l'étape 3, et que je la relance, il arrêtera bien le job.

    J'ai l'impression que l'initialisation de la variable ne se fait pas dans les conditions de la SP.

    Comment puis-je m'y prendre ?

    merci d'avance

  2. #2
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Cela me parait très bancale?
    Pourquoi ne pas intégrer cette logique directement dans le job? vous n'avez pas la main dessus?
    Votre boucle ne vérifie que toute les 10 secondes... le job peut très bien avoir passé une ou deux étapes sans que votre SP n'ai pu le voir...
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  3. #3
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    Et surtout, si j'ai bien compris le principe (je suis pas expert en PS), elle ne lit qu'une seule fois l'êtat du job, ensuite elle se contente de vérifie toutes les 10 sec si le premier résultat n'aurait par hasard pas changé (chose qui n'arrivera jamais)

    Il faudrait peut-être mettre le SELECT à l'intérieur de la boucle While pour relire le nouvel état du job, non ?
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  4. #4
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 126
    Points : 54
    Points
    54
    Par défaut
    Merci,

    je crois que je vais me faire tout petit


    je teste ca et je vous tiens au courant, mais il y a de fortes chance que ce soit ca

    merci encore

  5. #5
    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
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par iberserk Voir le message
    Cela me parait très bancale?
    Pourquoi ne pas intégrer cette logique directement dans le job? vous n'avez pas la main dessus?
    Surtout que si le job est par exemple e l'étape 1, ou 5, le while va tourner dans le vide sans le DELAY !
    prévois peut-être un extincteur à coté du serveur

Discussions similaires

  1. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 16h48
  2. Effectuer une boucle (foreach) dans une procédure stockée ?!
    Par Danny Blue dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 16/11/2007, 16h02
  3. [DEBUTANT]faire une boucle dans une procédure stockée
    Par tripper.dim dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 21/06/2007, 13h49
  4. Marquer une pause dans une procédure stockée
    Par PéPénet dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 08/11/2003, 10h42
  5. Transformation de date dans une procédure stockée
    Par bd0606 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 27/10/2003, 11h31

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