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 :

PB d'update qui plante aléatoirement sans renvoyer d'erreur


Sujet :

MS SQL Server

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4
    Points : 4
    Points
    4
    Par défaut PB d'update qui plante aléatoirement sans renvoyer d'erreur
    Bonjour je veux mettre à jour une table client dans ma base.
    Cette table a un identifiant unique qui s'incrémente à chaque INSERT et sert d'identifiant client.

    Lorsque je fais un Insert sur ma table j'utilise IDDENT_CURRENT pour récupérer l'id de mon nouveau client.

    La plupart du temps, cela fonctionne bien, mais parfois, la ligne correspondant à l'id renvoyé n'existe pas et l'id est qd même incrémenté...

    Pour l'appli le client est donc bien inséré alors qu'il n'en est rien.
    Ce problème se produit de manière complétement aléatoire et je n'ai aps moyen de le catcher.....Je le retouve de même sur d'autre tables sur lesquelles j'utilise le même systême d'insertition.

  2. #2
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 224
    Points : 19 566
    Points
    19 566
    Billets dans le blog
    25
    Par défaut
    ... et en utilisant @@identity ?

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 147
    Points : 144
    Points
    144
    Par défaut essaie un commit...
    Je ne sais pas si c'est possible dans ton cas, mais essaie de faire un begin trans puis un commit lors de l'insertion.
    Je me suis retrouvé dans le cas où j'avais besoin de faire un insert dans une table et dans laquelle je devais faire un delete avant. En fait je faisais le delete, je commitais, puis je faisais l'insert.
    Si je ne faisais pas BEGINTRANS/COMMIT lors du delete, je me retrouvais souvent en face d'une violation de clé. En espérant que ça t'aide...

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Merci bcps de vos réponses.
    J'utilise bien un begin et un commit dans dans ma transaction, mais c'est vrai que j'utilise IDDENT_CURRENT pour récupérer l'id... J'ai refait des tests cet après midi et le fait est que sur sur une 20aine de clients insérés, 1 a planté et m'a renvoyé un id alors qu'aucune ligne n'avait été faite. Le pire c'est que quand je regarde les logs tosu se apsse exactement pareil dans le cas ou cela plante et ds celui ou ça ne plante pas.

    Je précise que je fais appel à ma procédure stockée via une appli web utiliser apr environ 200 utilisateurs....

    Je teste avec @@identity et je vous tiens au courant.

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 852
    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 852
    Points : 52 992
    Points
    52 992
    Billets dans le blog
    6
    Par défaut
    Il ne faut surtout pas utiliser IDENT_CURRENT dans ton cas (et relativement rarement). En effet cette fonction renvoi le dernier incrément de n'importe quelle session, donc de n'importe quel utilisateur !!!

    Il faut utiliser @@IDENTITY ou SCOPE_IDENTITY qui sont propre à la session.

    Extrait de la doc SQL Server :
    "
    IDENT_CURRENT est similaire aux fonctions d'identité SCOPE_IDENTITY et @@IDENTITY de Microsoft® SQL Server™ 2000. Ces trois fonctions renvoient les dernières valeurs d'identité générées. Toutefois, la portée et la session sur lesquelles le paramètre 'last' est défini diffèrent pour chacune de ces fonctions.

    IDENT_CURRENT renvoie la dernière valeur d'identité générée pour une table spécifique dans n'importe quelles session et portée.


    @@IDENTITY renvoie la dernière valeur d'identité générée pour n'importe quelle table dans la session en cours et l'ensemble des portées.


    SCOPE_IDENTITY renvoie la dernière valeur d'identité générée pour n'importe quelle table dans la session et la portée en cours.
    "

    A +
    [/b]

  6. #6
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 147
    Points : 144
    Points
    144
    Par défaut Tout est dit...
    Je crois que tout est dit...

Discussions similaires

  1. [12c] Listener qui plante aléatoirement
    Par ste78 dans le forum Connexions aux bases de données
    Réponses: 2
    Dernier message: 18/11/2014, 13h49
  2. Réponses: 4
    Dernier message: 21/02/2013, 14h47
  3. Requête update qui plante
    Par Gaetch dans le forum WinDev
    Réponses: 1
    Dernier message: 20/05/2009, 17h40
  4. [MySQL] une étrange requête qui ne s'éxécute pas sans renvoyer d'erreur.
    Par Ekimasu dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 22/01/2009, 00h04
  5. Requête UPDATE qui plante
    Par rsgo dans le forum Requêtes
    Réponses: 5
    Dernier message: 10/04/2006, 11h30

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