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 :

Renvoyer des infos lors de l’exécution d'une grosse requête


Sujet :

MS SQL Server

  1. #1
    Membre confirmé Avatar de jimmypage
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 314
    Points : 474
    Points
    474
    Par défaut Renvoyer des infos lors de l’exécution d'une grosse requête
    Bonjour,

    J'ai créé une procédure stockée qui execute une grosse requête (SELECT), qui fait divers calculs puis fait des updates et des insert en masse dans ma base de données.

    Pour avoir une idée, l’exécution de la procédure stockée peut prendre entre 15 et 20 minutes...


    Je voudrais, pendant l'exécution de cette requête, pouvoir renvoyer des infos sur l'état d'avancement du calcul ou des modifications dans la base.
    Cela est-il possible ? si oui comment ?

    Merci !

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 848
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 848
    Points : 52 964
    Points
    52 964
    Billets dans le blog
    6
    Par défaut
    A moins que votre procédure ne soit composées de différentes requêtes, cela est matériellement impossible. En effet, même le moteur relationnel est incapable de savoir ou il en est de l'exécution de la requête du fait du traitement ensembliste.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    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 : 42
    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
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Effectivement on ne peut pas retourner un état d'avancement de la requête.
    En revanche on peut, dans le code de la procédure stockée, ajouter des PRINT si on souhaite avoir les résultats à la fin de l'exécution, ou des RAISERROR(<message>, 1, 1) WITH NOWAIT, de façon à les voir s'afficher dans la console de SSMS au fur et à mesure de l'exécution de la procédure stockée.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    DECLARE @start_dt datetime = GETDATE()
     
    <quelques instructions>
     
    PRINT '<Nom de l''opération> | Durée : ' + CAST(DATEDIFF(second, @start_dt, GETDATE()) AS varchar(20)) + ' | Nombre de lignes affectées : ' + CAST(@@ROWCOUNT AS varchar(20))
    SET @start_dt = GETDATE()
     
    <quelques instructions>
     
    ...
    Cela étant, on reste dans le cadre d'une exécution manuelle.
    Si vous procédez à l'exécution par une application, je ne sais pas s'il est possible de la mettre à l'écoute de messages; le mieux me semble être d'enregistrer l'état dans une table réservée à cet effet, et de l'interroger régulièrement.

    @++

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 05/11/2017, 12h38
  2. [applet]utilser des infos pour les traiter dans une servlet
    Par jeromejanson dans le forum Applets
    Réponses: 5
    Dernier message: 07/03/2010, 23h22
  3. renvoyer des infos d'une colonne à l'autre
    Par fabilabo dans le forum Excel
    Réponses: 2
    Dernier message: 15/01/2009, 13h02
  4. Affichage des infos après le choix d'une combobox
    Par manplum dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 07/08/2006, 10h31
  5. [TP7] Renvoyer des infos dans la console pour redirection
    Par Natopsi dans le forum Turbo Pascal
    Réponses: 1
    Dernier message: 05/11/2005, 18h21

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