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

Langage PHP Discussion :

Exécution en masse des requêtes sql server


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Octobre 2007
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 162
    Points : 82
    Points
    82
    Par défaut Exécution en masse des requêtes sql server
    Bonjour tout le monde

    Je dois effectuer une insertion et des mis à jour en masse(>100 lignes) et je veux savoir qu'elle est la meilleur méthode pour le faire?
    actuellement, j'utilise un variable de chaîne de caractère où je concatène mes requêtes, après j’exécute ce variable ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $sql="";
    for($i=0;$i<$nblig;$i++){
    $qry . ="insert into table values('champ1', 'champ2')";
    $qry .="update table2 set champ1=val1, champ2=val2 where id='$id'";
    }
    mssql_query($qry);
    Ce code m'évite de contacter la base de donner une seul fois mais c'est long à exécuter et ça se bloque en plein d'exécution

    je pense à utiliser un fichier qui où je vais mettre tout les instruction sql puis l’exécuter avec instruction bulk ou bcp mais ces instruction ne permet pas d'executer des requete de mis à jour(update), avez vous une solution à me proposer ou me donner un coup de main?

    Merci d'avance pour votre aide

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Si tu fais ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //mssql_query($qry);
     
    echo $qry
    Tu verras deux ou trois petite erreurs dans tes requêtes ;

  3. #3
    Membre régulier
    Inscrit en
    Octobre 2007
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 162
    Points : 82
    Points
    82
    Par défaut
    Merci d'avance pour votre réponse, je te confirme que je n'ai aucune erreur au niveau des requêtes générés la preuve c quand j'ai l'erreur je ré-exécute le même code et ça se passe le problème que l'action prend beaucoup de temps Pour s’exécuter et je veux d'autre proposition mieux que celle que j'ai adapté.

  4. #4
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 452
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 452
    Points : 4 601
    Points
    4 601
    Par défaut
    Citation Envoyé par nabilfaouzi Voir le message
    et je veux d'autre proposition mieux que celle que j'ai adapté.
    ce a quoi je reponds : tu auras ce que les gentils membres benevoles passant du temps sur les problemes des gens proposeront.

    sinon, pour t'aider, je dirais : ne concatene pas toutes tes requetes en 1 seule.. ca evite de te retrouver dans ton cas : ca plante, tu ne sais pas ou.

    si tu choisis d'executer tes requetes 1 a 1, pense a recuperer l'erreur sql dans un or die();
    => comme ca, tu auras tout de suite la requete qui pose probleme.

    si tu choisis de continuer a ne faire qu'une seule enorme requete, pense a separer chacune des requetes par un point-virgule ;

    pense a echaper tes strings (quotes, guillemets, caracteres speciaux...)

    sinon, tu dis que ca prend du temps a executer... c'est a dire ? 30 sec ? 3heures ?

    plus d'infos seraient le bievenue.
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  5. #5
    Membre régulier
    Inscrit en
    Octobre 2007
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 162
    Points : 82
    Points
    82
    Par défaut
    Bonjour
    Citation Envoyé par Doksuri Voir le message
    ce a quoi je reponds : tu auras ce que les gentils membres benevoles passant du temps sur les problemes des gens proposeront.
    merci d'abord pour tes consignes et tes remarques précieuse mais je ne comprend pas pourquoi cette remarque, si je suis ici c'est parce que j'ai besoin d'aide et que je suis bloquer à ce moment.

    Sinon, l'erreur que le système me renvoie c'est "l'instruction a été arrêté".
    Alors, j'ai regroupé les deux requêtes dans une PS au lieu et j’ai exécuté l’exécute dans la boucle comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $sql="";
    for($i=0;$i<$nblig;$i++){
    $qry ="EXEC table_insert 'champ1', 'champ2'";  'nouvelle requête
    mssql_query($qry);
    }
    et ça a bien dégrader le temps de réponse pour moi du 2m30 au 12 seconde pour un lot de 100 requêtes

  6. #6
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 452
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 452
    Points : 4 601
    Points
    4 601
    Par défaut
    c'est cool que tu aies pu resoudre ton probleme !

    pour ma remarque :
    et je veux d'autre proposition mieux que celle que j'ai adapté.
    c'est juste ton "je veux" qui m'a perturbe... il faudrait changer les habitudes et passer par "serait-il possible de...." (ou quelque chose qui fasse moins "obligation")
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

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

Discussions similaires

  1. Exécuter des requête SQL (avec ou sans PHP) dans javascript
    Par mir540 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/11/2009, 10h03
  2. Exécuter des requêtes SQL
    Par punisher999 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 25/03/2008, 10h26
  3. Fermeture des requêtes SQL Server
    Par zwina2004 dans le forum Bases de données
    Réponses: 5
    Dernier message: 26/10/2007, 16h17
  4. Réponses: 2
    Dernier message: 24/04/2007, 00h18
  5. Réponses: 2
    Dernier message: 04/04/2006, 11h46

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