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 :

Déclencher conditionnellement une série de procédures stockées


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Par défaut Déclencher conditionnellement une série de procédures stockées
    Bonjour,

    je suis actuellement sur un (petit) projet où des dizaines de traitements indépendants doivent pouvoir être déclenchés en batch selon un ordre et des conditions définis dans une table de la BDD, appelons-là "Schedule".

    Les traitements indépendants consistent surtout en des update d'une table pour ajouter / retirer du bonus (valeur numérique). Chaque règle peut ajouter du bonus, en retirer, l'améliorer de X%, etc. Les n modifications sont tracées en utilisant la fonction output.

    La solution technique choisie consiste à réaliser ces traitements dans des procédures stockées. Il y a plusieurs possibilités identifiées:
    • n procédures stockées, appelées depuis une procédure stockée mère qui lit la table Schedule et exécute les PS dans l'ordre indiqué (avec un flag permettant de gérer l'ordre).
    • 1 seule procédure stockée qui lit la table Schedule et exécute les traitements dans l'ordre indiqué (avec un flag permettant de gérer l'ordre).
    • autre solution géniale qui nous aurait échappé


    Ces solutions ont été écartées:
    • lancement via un flux ETL: pas d'ETL pour ce projet
    • planification windows des PS : l'utilisateur (avancé) doit pouvoir réorganiser les traitements, en activer / désactiver via une interface de saisie simple
    • enchaînement des PS dans un script Powershell (ou autre solution de script): l'utilisateur (avancé) doit pouvoir réorganiser les traitements, en activer / désactiver via une interface de saisie simple
    • planification des PS dans des jobs SQLServer : l'utilisateur (avancé) doit pouvoir réorganiser les traitements, en activer / désactiver via une interface de saisie simple sans accès administrateur à la BDD


    Sans réponse, je pense que je partirais dans la solution des n procédures stockées appelées depuis une procédure stockée mère mais je suis ouvert à toute solution répondant au besoin.

    Merci beaucoup

  2. #2
    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
    Bonjour,

    Entre les deux solutions, c'est du pareil au même, et plus une affaire de gout, notamment pour la maintenance.

    Une alternative qui pourrait présenter des avantages au niveau des perfs, ce serait d'effectuer tous les traitements en une seule requête, éventuellement en passant par une série de CTE pour garder la séparation logique de vos traitements.

    A voir le modèle, la volumétrie, les traitements en question.

  3. #3
    Membre Expert Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Par défaut
    Merci de votre réponse.

    Effectivement je suis d'accord pour l'affaire de goût, mais dans la 1ere solution je vais devoir boucler sur la liste des PS actives et pour chaque PS mettre son nom dans une variable @sp puis dérouler:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If @sp = 'PS0001' then
    EXEC PS0001
    If PS = 'PS0002' then
    EXEC PS0002
    ...
    ou pourquoi pas un élégant:
    ou
    Mais je me demandais s'il y avait d'autres solutions plus élégantes ou avec d'autres avantages.

    Merci

  4. #4
    Membre Expert Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Par défaut
    Bonjour,

    je me permets un petit up de ce sujet pour voir si d'autres solutions émergent.

    Merci à vous

Discussions similaires

  1. Mise à jour d'une table par procédure stockée
    Par amine1980 dans le forum PL/SQL
    Réponses: 1
    Dernier message: 24/11/2008, 16h12
  2. Réponses: 4
    Dernier message: 15/07/2008, 13h05
  3. Récupérer une valeur de procédure stockée en C#
    Par rudylar dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 15/07/2008, 11h50
  4. Réponses: 1
    Dernier message: 14/01/2008, 14h36
  5. Rafraîchissement d'une grille avec procédure stockée
    Par lecongolais dans le forum Bases de données
    Réponses: 1
    Dernier message: 01/02/2007, 22h38

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